1+ var config = require ( './config' ) ;
2+ var usersConfig = config . readUsersConfig ( ) ;
3+ var crypto = require ( "crypto" ) ;
4+
5+ const PASSWORD_REGEX = / ^ [ a - z A - Z 0 - 9 _ . - ] { 2 , } $ / g;
6+ const LOGIN_REGEX = / ^ [ a - z A - Z 0 - 9 _ . - ] { 4 , 16 } $ / g;
7+ const EMAIL_REGEX = / ^ [ \w -\. ] + @ ( [ \w - ] + \. ) + [ \w - ] { 2 , 4 } $ / g;
8+
9+ exports . authorize = ( hash , login ) => {
10+ var authsucc = false ;
11+ cfg = config . readConfig ( ) ;
12+ this . reloadUsersConfig ( ) ;
13+ users = usersConfig ;
14+ if ( cfg . auth == false ) {
15+ authsucc = true ;
16+ } else {
17+ if ( typeof ( hash ) !== "undefined" && hash != "" ) {
18+ if ( typeof users [ login ] !== "undefined" && users [ login ] . username !== "undefined" && users [ login ] . username . length > 0 ) {
19+ if ( users [ login ] . hash == hash ) {
20+ authsucc = true ;
21+ }
22+ }
23+ }
24+ }
25+ return authsucc ;
26+ }
27+
28+ exports . login = ( password , login ) => {
29+ var authsucc = false ;
30+ cfg = config . readConfig ( ) ;
31+ this . reloadUsersConfig ( ) ;
32+ users = usersConfig ;
33+ if ( cfg . auth == false ) {
34+ authsucc = true ;
35+ } else {
36+ if ( typeof ( password ) !== "undefined" && password != "" ) {
37+ if ( typeof users [ login ] !== "undefined" && users [ login ] . username !== "undefined" && users [ login ] . username . length > 0 ) {
38+ if ( users [ login ] . password == crypto . createHash ( 'sha256' ) . update ( password ) . digest ( 'hex' ) ) {
39+ authsucc = true ;
40+ }
41+ }
42+ }
43+ }
44+ return authsucc ;
45+ }
46+
47+ exports . addNewUser = ( password , login , permissions , mail ) => {
48+ success = false ;
49+ cfg = config . readConfig ( ) ;
50+ this . reloadUsersConfig ( ) ;
51+ users = usersConfig ;
52+
53+ if ( login == "kubek" ) {
54+ success = "You can`t use this function on admin account" ;
55+ } else {
56+ if ( cfg . auth == false ) {
57+ success = "Auth is disabled" ;
58+ } else {
59+ if ( Object . keys ( users ) . length >= 6 ) {
60+ success = "Users count is limited to 5 users" ;
61+ } else {
62+ if ( mail == null || typeof mail == "undefined" || mail . match ( EMAIL_REGEX ) ) {
63+ if ( login . match ( LOGIN_REGEX ) && password . match ( PASSWORD_REGEX ) ) {
64+ if ( typeof users [ login ] == "undefined" ) {
65+ newUserHash = crypto . randomUUID ( ) . toString ( ) ;
66+ if ( permissions [ 0 ] == "" ) {
67+ permissions = [ ] ;
68+ }
69+ users [ login ] = {
70+ username : login ,
71+ password : crypto . createHash ( 'sha256' ) . update ( password ) . digest ( 'hex' ) ,
72+ hash : newUserHash ,
73+ permissions : permissions ,
74+ mail : mail
75+ }
76+ config . writeUsersConfig ( users ) ;
77+ success = true ;
78+ } else {
79+ success = "User already exists" ;
80+ }
81+ } else {
82+ success = "Not matching regex" ;
83+ }
84+ } else {
85+ success = "Not matching regex" ;
86+ }
87+ }
88+ }
89+ }
90+ return success ;
91+ }
92+
93+ exports . regenUserHash = ( login ) => {
94+ success = false ;
95+ cfg = config . readConfig ( ) ;
96+ this . reloadUsersConfig ( ) ;
97+ users = usersConfig ;
98+
99+ if ( cfg . auth == false ) {
100+ success = "Auth is disabled" ;
101+ } else {
102+ if ( login . match ( LOGIN_REGEX ) ) {
103+ if ( typeof users [ login ] !== "undefined" ) {
104+ newUserHash = crypto . randomUUID ( ) . toString ( ) ;
105+ users [ login ] [ 'hash' ] = newUserHash ;
106+ config . writeUsersConfig ( users ) ;
107+ success = true ;
108+ } else {
109+ success = "User not exists" ;
110+ }
111+ } else {
112+ success = "Not matching regex" ;
113+ }
114+ }
115+ return success ;
116+ }
117+
118+ exports . changeAdminPass = ( oldPass , newPass ) => {
119+ success = false ;
120+ cfg = config . readConfig ( ) ;
121+ this . reloadUsersConfig ( ) ;
122+ users = usersConfig ;
123+
124+ if ( cfg . auth == false ) {
125+ success = "Auth is disabled" ;
126+ } else {
127+ op_hash = crypto . createHash ( 'sha256' ) . update ( oldPass ) . digest ( 'hex' ) ;
128+ np_hash = crypto . createHash ( 'sha256' ) . update ( newPass ) . digest ( 'hex' ) ;
129+ if ( users [ 'kubek' ] [ 'password' ] == op_hash ) {
130+ users [ 'kubek' ] [ 'password' ] = np_hash ;
131+ newUserHash = crypto . randomUUID ( ) . toString ( ) ;
132+ users [ 'kubek' ] [ 'hash' ] = newUserHash ;
133+ config . writeUsersConfig ( users ) ;
134+ success = true ;
135+ } else {
136+ success = "Old password is incorrect" ;
137+ }
138+ }
139+ return success ;
140+ }
141+
142+ exports . deleteUser = ( login ) => {
143+ success = false ;
144+ cfg = config . readConfig ( ) ;
145+ this . reloadUsersConfig ( ) ;
146+ users = usersConfig ;
147+
148+ if ( login == "kubek" ) {
149+ success = "You can`t use this function on admin account" ;
150+ } else {
151+ if ( cfg . auth == false ) {
152+ success = "Auth is disabled" ;
153+ } else {
154+ if ( login . match ( LOGIN_REGEX ) ) {
155+ if ( typeof users [ login ] !== "undefined" ) {
156+ users [ login ] = "" ;
157+ delete users [ login ] ;
158+ config . writeUsersConfig ( users ) ;
159+ success = true ;
160+ } else {
161+ success = "User not exists" ;
162+ }
163+ } else {
164+ success = "Not matching regex" ;
165+ }
166+ }
167+ }
168+ return success ;
169+ }
170+
171+ exports . editUser = ( login , permissions , mail ) => {
172+ success = false ;
173+ cfg = config . readConfig ( ) ;
174+ this . reloadUsersConfig ( ) ;
175+ users = usersConfig ;
176+
177+ if ( login == "kubek" ) {
178+ success = "You can`t use this function on admin account" ;
179+ } else {
180+ if ( cfg . auth == false ) {
181+ success = "Auth is disabled" ;
182+ } else {
183+ if ( mail == null || mail == "" || typeof mail == "undefined" || mail . match ( EMAIL_REGEX ) ) {
184+ if ( login . match ( LOGIN_REGEX ) ) {
185+ if ( typeof users [ login ] !== "undefined" ) {
186+ users [ login ] [ 'mail' ] = mail ;
187+ if ( permissions [ 0 ] == "" ) {
188+ permissions = [ ] ;
189+ }
190+ newUserHash = crypto . randomUUID ( ) . toString ( ) ;
191+ users [ login ] [ 'permissions' ] = permissions ;
192+ users [ login ] [ 'hash' ] = newUserHash ;
193+ config . writeUsersConfig ( users ) ;
194+ success = true ;
195+ } else {
196+ success = "User not exists" ;
197+ }
198+ } else {
199+ success = "Not matching regex" ;
200+ }
201+ } else {
202+ success = "Not matching regex" ;
203+ }
204+ }
205+ }
206+ return success ;
207+ }
208+
209+ exports . getUserPermissions = ( hash , login ) => {
210+ auth = this . authorize ( hash , login ) ;
211+ if ( auth == true ) {
212+ if ( typeof usersConfig [ login ] !== "undefined" && typeof usersConfig [ login ] . permissions !== "undefined" ) {
213+ return usersConfig [ login ] . permissions ;
214+ } else {
215+ return false ;
216+ }
217+ } else {
218+ return false ;
219+ }
220+ }
221+
222+ exports . reloadUsersConfig = ( ) => {
223+ usersConfig = config . readUsersConfig ( ) ;
224+ }
0 commit comments