-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathBasicUsers.js
125 lines (110 loc) · 2.45 KB
/
BasicUsers.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
"use strict"
var Sha256 = require("./public/sha256")
var fs = require("fs")
class BasicUsers {
constructor(props) {
this.saveDestination = props.saveDestination
this.adminUsername = props.adminUsername.toLowerCase()
this.adminPassword = props.adminPassword
this.secret = props.secret
this.load()
}
save() {
fs.writeFile(this.saveDestination, JSON.stringify({
users: this.users,
nextUserId: this.nextUserId
}))
}
load() {
fs.readFile(this.saveDestination, (err, data) => {
if (data) {
var parsed = JSON.parse(data)
this.users = parsed.users
this.nextUserId = parsed.nextUserId
} else {
this.users = {}
this.nextUserId = 1
}
this.users["0"] = {
id: 0,
username: this.adminUsername,
password: this.hashPassword(Sha256.hash(this.adminUsername + this.adminPassword)),
permission: 0
}
})
}
getUserByUsername(username) {
username = username.toLowerCase()
for (var k in this.users) {
var user = this.users[k]
if (user.username == username) {
return user
}
}
}
getUsers() {
var users = []
for (var k in this.users) {
var user = this.users[k]
if (user.username !== this.adminUsername) {
users.push({
id: user.id,
username: user.username,
permission: user.permission
})
}
}
users.sort((a,b) => {
if (a.username !== b.username) {
if (a.username >= b.username) {
return 1
} else {
return -1
}
}
return 0
})
return users
}
hashPassword(password) {
return Sha256.hash(password + this.secret)
}
checkPassword(user, password) {
return user.password === Sha256.hash(password + this.secret)
}
createUser(username, password, permission) {
username = username.toLowerCase()
if (username !== this.adminUsername) {
var id = this.nextUserId++
this.users[id] = {
id,
username,
password: this.hashPassword(password),
permission
}
this.save()
}
}
editUser(id, username, password, permission) {
username = username.toLowerCase()
var oldUser = this.users[id]
if (username !== this.adminUsername && id !== 0 && oldUser) {
oldUser.username = username
if (password) {
oldUser.password = this.hashPassword(password)
}
oldUser.permission = permission
this.save()
}
}
deleteUsers(ids) {
for (var i = 0; i < ids.length; i++) {
var id = ids[i]
if (id !== this.adminUsername) {
delete this.users[id]
this.save()
}
}
}
}
module.exports = BasicUsers