Browse Source

check

master
nitowa 2 years ago
parent
commit
109f01adf3

+ 22
- 5
src/backend/Components/GameCoordinator/GameCoordinator.ts View File

@@ -3,6 +3,7 @@ import { TGameCoordinator, TPGameCoordinator } from "./RPCInterface";
3 3
 import { FrontworkComponent } from "../../Types/FrontworkComponent";
4 4
 import { IGameCoordinator } from "./Interface";
5 5
 import { IUserManager } from "../UserManager/Interface";
6
+import { User } from "../../Types/Types";
6 7
 
7 8
 @Injectable(IGameCoordinator)
8 9
 export class GameCoordinator
@@ -10,7 +11,14 @@ export class GameCoordinator
10 11
     name = "GameCoordinator" as "GameCoordinator"
11 12
 
12 13
     @Inject(IUserManager)
13
-    private userManager : IUserManager
14
+    private userManager: IUserManager
15
+
16
+    private queue: {
17
+        [sessionToken in string]: {
18
+            user: User,
19
+            callback: Function
20
+        }
21
+    }
14 22
 
15 23
     RPCs: () => [
16 24
     ]
@@ -18,15 +26,24 @@ export class GameCoordinator
18 26
     RPCFeatures = () => [
19 27
     ]
20 28
 
21
-    getTableDefinitions(){
29
+    getTableDefinitions() {
22 30
         return []
23 31
     }
24 32
 
25
-    findMatch = (sessionToken, gameOptions) => {
33
+    findMatch = async (sessionToken, gameOptions, callback) => {
34
+        const [username, record] = this.userManager.getUserRecordByToken(sessionToken)
35
+        if (!username || !record) throw new Error("Bad session")
26 36
 
37
+        const user = await this.userManager.getUser(username)
38
+        if (!user) throw new Error("Unknown user")
39
+
40
+        this.queue[sessionToken] = {
41
+            callback: callback,
42
+            user: user
43
+        }
27 44
     }
28 45
 
29
-    joinMatch = (sessionToken, gameToken, deckOptions) => {
30
-        
46
+    joinMatch = (sessionToken, gameToken, deckOptions, callback) => {
47
+
31 48
     }
32 49
 }

+ 1
- 1
src/backend/Components/UserManager/Interface.ts View File

@@ -7,7 +7,7 @@ export class IUserManager{
7 7
     setPermission: (perm: RPCPermission) => Promise<void>
8 8
     getPermissions: () => Promise<RPCPermission[]>
9 9
     checkToken: (token: string, rank: Rank) => boolean
10
-    getUserRecordByToken: (tokenValue: string) => [string, UserRecord] | void
10
+    getUserRecordByToken: (tokenValue: string) => [string, UserRecord]
11 11
     getUser: (username: string) => Promise<User | void>
12 12
     adminLogout: (username: string) => Promise<void>
13 13
     changeRank: (user:User, rank: Rank) => Promise<User>

+ 28
- 23
src/backend/Components/UserManager/UserManager.ts View File

@@ -132,14 +132,14 @@ export class UserManager
132 132
                     }
133 133
                     try {
134 134
                         //If no ADMIN user exists next created user will be made ADMIN
135
-                        if(this.checkForAdmin){
136
-                            const admin:User = await this.knexModule
137
-                            .knex('users')
138
-                            .where(<SomeOf<User>>{
139
-                                rank: 'ADMIN'
140
-                            }).first()
141
-                            
142
-                            if(!admin){
135
+                        if (this.checkForAdmin) {
136
+                            const admin: User = await this.knexModule
137
+                                .knex('users')
138
+                                .where(<SomeOf<User>>{
139
+                                    rank: 'ADMIN'
140
+                                }).first()
141
+
142
+                            if (!admin) {
143 143
                                 user.rank = 'ADMIN'
144 144
                             }
145 145
                             this.checkForAdmin = false
@@ -182,10 +182,11 @@ export class UserManager
182 182
 
183 183
         await Promise.all(
184 184
             [...this.admin.frontworkComponents].flatMap(exp => exp.RPCFeatures().map(async (feature) => {
185
-                try {
186
-                    await this.knexModule.knex.insert({ rpcname: feature.name }).into('rpcpermissions')
187
-                } catch (e) {
188
-                }
185
+                    await this.knexModule
186
+                    .knex('rpcpermissions')
187
+                    .insert(<SomeOf<RPCPermission>>{ 
188
+                        rpcname: feature.name 
189
+                    })
189 190
             })))
190 191
 
191 192
         this.privilegedServer = await this.startRankServer()
@@ -212,6 +213,7 @@ export class UserManager
212 213
 
213 214
         let user: User, token: Token
214 215
         try {
216
+            //@ts-ignore
215 217
             [user, token] = await Promise.race([socket.call('getUserData'), new Promise((res, rej) => { setTimeout(rej, 250); })])
216 218
         } catch (e) {
217 219
             getLogger('UserManager#checkConnection').debug('Client didn\'t respond', e)
@@ -244,9 +246,12 @@ export class UserManager
244 246
 
245 247
     adminChangePassword = async (username: string, pwHash: string): Promise<User> => {
246 248
         const salted = await saltedHash(pwHash, salt)
247
-        await this.knexModule.knex('users')
248
-            .update({ pwhash: salted })
249
-            .where({
249
+        await this.knexModule
250
+            .knex('users')
251
+            .update(<SomeOf<User>>{
252
+                pwhash: salted
253
+            })
254
+            .where(<SomeOf<User>>{
250 255
                 username: username.toLowerCase()
251 256
             })
252 257
 
@@ -258,7 +263,9 @@ export class UserManager
258 263
 
259 264
     setPermission = async (permission: RPCPermission) => {
260 265
         await this.knexModule.knex('rpcpermissions')
261
-            .where('rpcname', '=', permission.rpcname)
266
+            .where(<SomeOf<RPCPermission>>{
267
+                rpcname: permission.rpcname
268
+            })
262 269
             .update(permission)
263 270
 
264 271
         await Promise.all(
@@ -276,7 +283,9 @@ export class UserManager
276 283
         const perm: RPCPermission = await this.knexModule.knex
277 284
             .select(rank)
278 285
             .from('rpcpermissions')
279
-            .where('rpcname', '=', <string>feature)
286
+            .where(<SomeOf<RPCPermission>>{
287
+                rpcname: feature
288
+            })
280 289
             .first()
281 290
 
282 291
         if (!perm) return false
@@ -312,9 +321,7 @@ export class UserManager
312 321
                         //getLogger('UserManager#adminLogout#kick').debug(String(e))
313 322
                     }
314 323
                 })
315
-                this.allowed = this.allowed.filter(allowed => {
316
-                    return allowed != token
317
-                })
324
+                this.allowed = this.allowed.filter(allowed => allowed != token)
318 325
                 delete this.userConnections[username]
319 326
             }
320 327
         } catch (e) {
@@ -342,9 +349,7 @@ export class UserManager
342 349
         throw new Error('login failed')
343 350
     }
344 351
 
345
-    getUserRecordByToken(tokenValue: string) {
346
-        return Object.entries(this.userConnections).find(([k, v]) => v.token.value === tokenValue)
347
-    }
352
+    getUserRecordByToken = (tokenValue: string) : [string, UserRecord] => Object.entries(this.userConnections).find(([k, v]) => v.token.value === tokenValue)
348 353
 
349 354
     getToken = (tokenValue: string): Token | void => {
350 355
         const [username, userRecord] = this.getUserRecordByToken(tokenValue)

+ 3
- 3
test/backendTest.ts View File

@@ -1,7 +1,7 @@
1 1
 import { ConnectedSocket, RPCSocket } from "rpclibrary"
2 2
 import { Injector } from "../src/backend/Injector/Injector"
3 3
 import { FrontworkAdmin } from "../src/backend/Admin/Admin"
4
-import { TTiles, TPTiles, User, Token } from "../src/backend/Types/Types"
4
+import { TTiles, TPTiles } from "../src/backend/Types/Types"
5 5
 import { IPubSub } from "../src/backend/Components/PubSub/Interface"
6 6
 import { PubSub } from "../src/backend/Components/PubSub/PubSub"
7 7
 import { EMAIL_VERIFY_SUCCESS, SIGNUP_SUCCESS } from "../src/backend/Types/Strings"
@@ -21,7 +21,7 @@ describe('Frontcraft', () => {
21 21
 
22 22
     let client: ConnectedSocket<TTiles>
23 23
     let server: FrontworkAdmin
24
-    let privClient: ConnectedSocket<TPTiles>
24
+    let adminClient: ConnectedSocket<TPTiles>
25 25
 
26 26
     before(done => {
27 27
         server = Injector.resolve<FrontworkAdmin>(FrontworkAdmin)
@@ -105,7 +105,7 @@ describe('Frontcraft', () => {
105 105
             new RPCSocket<TPTiles>(8080, "localhost", {
106 106
                 path: "/managed"
107 107
             }).connect(token.value).then(connectedSocket => {
108
-                privClient = connectedSocket
108
+                adminClient = connectedSocket
109 109
                 connectedSocket.hook('getUserData', () => [user, token])
110 110
                 done()
111 111
             }).catch(done)

Loading…
Cancel
Save