This commit is contained in:
peter
2019-11-24 13:25:36 +01:00
parent 7221a25258
commit 66aedac6d0
+64 -59
View File
@@ -12,32 +12,30 @@ implements FrontworkComponent<UserManagerIfc, UserManagerFeatureIfc>{
name = "Authenticator" as "Authenticator"; name = "Authenticator" as "Authenticator";
admin:FrontworkAdmin admin:FrontworkAdmin
constructor(private exporters: PrivilegedRPCExporter[]){} constructor(
private exporters: PrivilegedRPCExporter[]
){}
exportRPCs() { exportRPCs = () => [
return [ {
{ name: 'login' as 'login',
name: 'login' as 'login', call: async (username:string, pwHash:string) => await this.login(username, pwHash)
call: async (username:string, pwHash:string) => await this.login(username, pwHash) },{
},{ name: 'authenticate' as 'authenticate',
name: 'authenticate' as 'authenticate', call: async (tokenValue:string | Token) => await this.authenticate(tokenValue)
call: async (tokenValue:string | Token) => await this.authenticate(tokenValue) }
} ]
]
}
onSetAdmin(admin:FrontworkAdmin){ onSetAdmin(admin:FrontworkAdmin){
this.exporters.forEach(e => e['admin'] = admin) this.exporters.forEach(e => e['admin'] = admin)
} }
exportRPCFeatures() { exportRPCFeatures = () => [
return [{ {
name: 'createUser' as 'createUser', name: 'createUser' as 'createUser',
exportRPCs: () => [{ exportRPCs: () => [{
name: 'createUser' as 'createUser', name: 'createUser' as 'createUser',
call: async (user:User) => { call: async (user:User) => await this.createUser(user)
return await this.createUser(user)
}
}] }]
},{ },{
name: 'modifyPermissions' as 'modifyPermissions', name: 'modifyPermissions' as 'modifyPermissions',
@@ -48,47 +46,56 @@ implements FrontworkComponent<UserManagerIfc, UserManagerFeatureIfc>{
name: 'setPermission' as 'setPermission', name: 'setPermission' as 'setPermission',
call: async (perm: RPCPermission) => await this.setPermission(perm) call: async (perm: RPCPermission) => await this.setPermission(perm)
}] }]
}] }
} ]
getTableDefinitions(): TableDefiniton[] {
return [ getTableDefinitions = (): TableDefiniton[] => [
{ {
name: 'users', name: 'users',
tableBuilder: (table) => { tableBuilder: (table) => {
table.increments("id").primary() table.increments("id").primary()
table.string("name").notNullable().unique() table.string("name").notNullable().unique()
table.string("pwhash").notNullable() table.string("pwhash").notNullable()
table.string("rank").notNullable() table.string("rank").notNullable()
table.integer("specid").notNullable() table.string("email").nullable().unique()
table.foreign('specid').references('specs.id')
table.string("email").nullable().unique()
}
},{
name: 'rpcpermissions',
tableBuilder: (table) => {
table.string("name").primary().notNullable()
table.boolean("ADMIN").defaultTo(true).notNullable()
_Rank.forEach(r => table.boolean(r).defaultTo(false).notNullable())
}
},{
name: 'tokens',
tableBuilder: (table) => {
table.string('value').primary()
table.integer('user_id').notNullable()
table.foreign('user_id').references('users')
table.dateTime('created').defaultTo(this.admin.knex.fn.now())
}
},{
name: 'specs',
tableBuilder: (table) => {
table.increments('id').primary()
table.string('class')
table.string('name')
}
} }
,...this.exporters.flatMap(exp => exp['getTableDefinitions']?exp['getTableDefinitions']():undefined)] },{
} name: 'characters',
tableBuilder: (table) => {
table.increments("id").primary()
table.string("name").notNullable().unique()
table.integer("specid").notNullable()
table.foreign("specid").references("specs.id")
table.integer("userid").notNullable()
table.foreign("userid").references("users.id")
}
},{
name: 'rpcpermissions',
tableBuilder: (table) => {
table.string("name").primary().notNullable()
table.boolean("ADMIN").defaultTo(true).notNullable()
_Rank.forEach(r => table.boolean(r).defaultTo(false).notNullable())
}
},{
name: 'tokens',
tableBuilder: (table) => {
table.string('value').primary()
table.integer('user_id').notNullable()
table.foreign('user_id').references('users')
table.dateTime('created').defaultTo(this.admin.knex.fn.now())
}
},{
name: 'specs',
tableBuilder: (table) => {
table.string('class')
table.string('name')
table.primary(['class', 'name'])
}
}
,...this.exporters.flatMap(exp => exp['getTableDefinitions']?exp['getTableDefinitions']():undefined)
]
async initialize(){ async initialize(){
await Promise.all( await Promise.all(
@@ -100,9 +107,7 @@ implements FrontworkComponent<UserManagerIfc, UserManagerFeatureIfc>{
await Promise.all(this.exporters.map(ex => ex['initialize']?ex['initialize']():undefined)) await Promise.all(this.exporters.map(ex => ex['initialize']?ex['initialize']():undefined))
console.log(getSpecTableData()) await this.admin.knex('specs').insert(getSpecTableData()).catch(e => { console.log("skipping spec insertion") })
await this.admin.knex('specs').insert(getSpecTableData()).catch(console.log)
} }
async setPermission(permission: RPCPermission){ async setPermission(permission: RPCPermission){