|
|
@@ -12,32 +12,30 @@ implements FrontworkComponent<UserManagerIfc, UserManagerFeatureIfc>{
|
|
12
|
12
|
name = "Authenticator" as "Authenticator";
|
|
13
|
13
|
admin:FrontworkAdmin
|
|
14
|
14
|
|
|
15
|
|
- constructor(private exporters: PrivilegedRPCExporter[]){}
|
|
16
|
|
-
|
|
17
|
|
- exportRPCs() {
|
|
18
|
|
- return [
|
|
19
|
|
- {
|
|
20
|
|
- name: 'login' as 'login',
|
|
21
|
|
- call: async (username:string, pwHash:string) => await this.login(username, pwHash)
|
|
22
|
|
- },{
|
|
23
|
|
- name: 'authenticate' as 'authenticate',
|
|
24
|
|
- call: async (tokenValue:string | Token) => await this.authenticate(tokenValue)
|
|
25
|
|
- }
|
|
26
|
|
- ]
|
|
27
|
|
- }
|
|
|
15
|
+ constructor(
|
|
|
16
|
+ private exporters: PrivilegedRPCExporter[]
|
|
|
17
|
+ ){}
|
|
|
18
|
+
|
|
|
19
|
+ exportRPCs = () => [
|
|
|
20
|
+ {
|
|
|
21
|
+ name: 'login' as 'login',
|
|
|
22
|
+ call: async (username:string, pwHash:string) => await this.login(username, pwHash)
|
|
|
23
|
+ },{
|
|
|
24
|
+ name: 'authenticate' as 'authenticate',
|
|
|
25
|
+ call: async (tokenValue:string | Token) => await this.authenticate(tokenValue)
|
|
|
26
|
+ }
|
|
|
27
|
+ ]
|
|
28
|
28
|
|
|
29
|
29
|
onSetAdmin(admin:FrontworkAdmin){
|
|
30
|
30
|
this.exporters.forEach(e => e['admin'] = admin)
|
|
31
|
31
|
}
|
|
32
|
32
|
|
|
33
|
|
- exportRPCFeatures() {
|
|
34
|
|
- return [{
|
|
|
33
|
+ exportRPCFeatures = () => [
|
|
|
34
|
+ {
|
|
35
|
35
|
name: 'createUser' as 'createUser',
|
|
36
|
36
|
exportRPCs: () => [{
|
|
37
|
37
|
name: 'createUser' as 'createUser',
|
|
38
|
|
- call: async (user:User) => {
|
|
39
|
|
- return await this.createUser(user)
|
|
40
|
|
- }
|
|
|
38
|
+ call: async (user:User) => await this.createUser(user)
|
|
41
|
39
|
}]
|
|
42
|
40
|
},{
|
|
43
|
41
|
name: 'modifyPermissions' as 'modifyPermissions',
|
|
|
@@ -48,47 +46,56 @@ implements FrontworkComponent<UserManagerIfc, UserManagerFeatureIfc>{
|
|
48
|
46
|
name: 'setPermission' as 'setPermission',
|
|
49
|
47
|
call: async (perm: RPCPermission) => await this.setPermission(perm)
|
|
50
|
48
|
}]
|
|
51
|
|
- }]
|
|
52
|
|
- }
|
|
|
49
|
+ }
|
|
|
50
|
+ ]
|
|
53
|
51
|
|
|
54
|
|
- getTableDefinitions(): TableDefiniton[] {
|
|
55
|
|
- return [
|
|
56
|
|
- {
|
|
57
|
|
- name: 'users',
|
|
58
|
|
- tableBuilder: (table) => {
|
|
59
|
|
- table.increments("id").primary()
|
|
60
|
|
- table.string("name").notNullable().unique()
|
|
61
|
|
- table.string("pwhash").notNullable()
|
|
62
|
|
- table.string("rank").notNullable()
|
|
63
|
|
- table.integer("specid").notNullable()
|
|
64
|
|
- table.foreign('specid').references('specs.id')
|
|
65
|
|
- table.string("email").nullable().unique()
|
|
66
|
|
- }
|
|
67
|
|
- },{
|
|
68
|
|
- name: 'rpcpermissions',
|
|
69
|
|
- tableBuilder: (table) => {
|
|
70
|
|
- table.string("name").primary().notNullable()
|
|
71
|
|
- table.boolean("ADMIN").defaultTo(true).notNullable()
|
|
72
|
|
- _Rank.forEach(r => table.boolean(r).defaultTo(false).notNullable())
|
|
73
|
|
- }
|
|
74
|
|
- },{
|
|
75
|
|
- name: 'tokens',
|
|
76
|
|
- tableBuilder: (table) => {
|
|
77
|
|
- table.string('value').primary()
|
|
78
|
|
- table.integer('user_id').notNullable()
|
|
79
|
|
- table.foreign('user_id').references('users')
|
|
80
|
|
- table.dateTime('created').defaultTo(this.admin.knex.fn.now())
|
|
81
|
|
- }
|
|
82
|
|
- },{
|
|
83
|
|
- name: 'specs',
|
|
84
|
|
- tableBuilder: (table) => {
|
|
85
|
|
- table.increments('id').primary()
|
|
86
|
|
- table.string('class')
|
|
87
|
|
- table.string('name')
|
|
88
|
|
- }
|
|
|
52
|
+
|
|
|
53
|
+ getTableDefinitions = (): TableDefiniton[] => [
|
|
|
54
|
+ {
|
|
|
55
|
+ name: 'users',
|
|
|
56
|
+ tableBuilder: (table) => {
|
|
|
57
|
+ table.increments("id").primary()
|
|
|
58
|
+ table.string("name").notNullable().unique()
|
|
|
59
|
+ table.string("pwhash").notNullable()
|
|
|
60
|
+ table.string("rank").notNullable()
|
|
|
61
|
+ table.string("email").nullable().unique()
|
|
89
|
62
|
}
|
|
90
|
|
- ,...this.exporters.flatMap(exp => exp['getTableDefinitions']?exp['getTableDefinitions']():undefined)]
|
|
91
|
|
- }
|
|
|
63
|
+ },{
|
|
|
64
|
+ name: 'characters',
|
|
|
65
|
+ tableBuilder: (table) => {
|
|
|
66
|
+ table.increments("id").primary()
|
|
|
67
|
+ table.string("name").notNullable().unique()
|
|
|
68
|
+ table.integer("specid").notNullable()
|
|
|
69
|
+ table.foreign("specid").references("specs.id")
|
|
|
70
|
+ table.integer("userid").notNullable()
|
|
|
71
|
+ table.foreign("userid").references("users.id")
|
|
|
72
|
+ }
|
|
|
73
|
+ },{
|
|
|
74
|
+ name: 'rpcpermissions',
|
|
|
75
|
+ tableBuilder: (table) => {
|
|
|
76
|
+ table.string("name").primary().notNullable()
|
|
|
77
|
+ table.boolean("ADMIN").defaultTo(true).notNullable()
|
|
|
78
|
+ _Rank.forEach(r => table.boolean(r).defaultTo(false).notNullable())
|
|
|
79
|
+ }
|
|
|
80
|
+ },{
|
|
|
81
|
+ name: 'tokens',
|
|
|
82
|
+ tableBuilder: (table) => {
|
|
|
83
|
+ table.string('value').primary()
|
|
|
84
|
+ table.integer('user_id').notNullable()
|
|
|
85
|
+ table.foreign('user_id').references('users')
|
|
|
86
|
+ table.dateTime('created').defaultTo(this.admin.knex.fn.now())
|
|
|
87
|
+ }
|
|
|
88
|
+ },{
|
|
|
89
|
+ name: 'specs',
|
|
|
90
|
+ tableBuilder: (table) => {
|
|
|
91
|
+ table.string('class')
|
|
|
92
|
+ table.string('name')
|
|
|
93
|
+ table.primary(['class', 'name'])
|
|
|
94
|
+ }
|
|
|
95
|
+ }
|
|
|
96
|
+ ,...this.exporters.flatMap(exp => exp['getTableDefinitions']?exp['getTableDefinitions']():undefined)
|
|
|
97
|
+ ]
|
|
|
98
|
+
|
|
92
|
99
|
|
|
93
|
100
|
async initialize(){
|
|
94
|
101
|
await Promise.all(
|
|
|
@@ -100,9 +107,7 @@ implements FrontworkComponent<UserManagerIfc, UserManagerFeatureIfc>{
|
|
100
|
107
|
|
|
101
|
108
|
await Promise.all(this.exporters.map(ex => ex['initialize']?ex['initialize']():undefined))
|
|
102
|
109
|
|
|
103
|
|
- console.log(getSpecTableData())
|
|
104
|
|
-
|
|
105
|
|
- await this.admin.knex('specs').insert(getSpecTableData()).catch(console.log)
|
|
|
110
|
+ await this.admin.knex('specs').insert(getSpecTableData()).catch(e => { console.log("skipping spec insertion") })
|
|
106
|
111
|
}
|
|
107
|
112
|
|
|
108
|
113
|
async setPermission(permission: RPCPermission){
|