Settings resource; oauth2 app authorization model; UI cleanup
This commit is contained in:
56
app/models/Setting.model.js
Normal file
56
app/models/Setting.model.js
Normal file
@@ -0,0 +1,56 @@
|
||||
const { Model } = require('flitter-orm')
|
||||
|
||||
class SettingModel extends Model {
|
||||
static get services() {
|
||||
return [...super.services, 'utility']
|
||||
}
|
||||
|
||||
static get schema() {
|
||||
return {
|
||||
key: String,
|
||||
value: String,
|
||||
history: [String],
|
||||
}
|
||||
}
|
||||
|
||||
static async guarantee(key, value = '') {
|
||||
if ( !(await this.findOne({ key })) ) {
|
||||
const new_inst = new this({ key })
|
||||
new_inst.set(value)
|
||||
await new_inst.save()
|
||||
}
|
||||
}
|
||||
|
||||
static async get(key) {
|
||||
const inst = await this.findOne({ key })
|
||||
return inst.get()
|
||||
}
|
||||
|
||||
static async set(key, value) {
|
||||
const inst = await this.findOne({ key })
|
||||
inst.set(value)
|
||||
await inst.save()
|
||||
}
|
||||
|
||||
get() {
|
||||
return JSON.parse(this.value)
|
||||
}
|
||||
|
||||
set(value) {
|
||||
if ( Array.isArray(this.history) )
|
||||
this.history.push(this.value)
|
||||
|
||||
this.value = JSON.stringify(value)
|
||||
}
|
||||
|
||||
async to_api() {
|
||||
return {
|
||||
id: this.key,
|
||||
key: this.key,
|
||||
value: this.get(),
|
||||
history: this.history || [],
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = exports = SettingModel
|
||||
13
app/models/auth/AppAuthorization.model.js
Normal file
13
app/models/auth/AppAuthorization.model.js
Normal file
@@ -0,0 +1,13 @@
|
||||
const { Model } = require('flitter-orm')
|
||||
|
||||
class AppAuthorizationModel extends Model {
|
||||
static get schema() {
|
||||
return {
|
||||
client_id: String,
|
||||
authorize_date: { type: Date, default: () => new Date },
|
||||
api_scopes: [String],
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = exports = AppAuthorizationModel
|
||||
@@ -4,6 +4,7 @@ const LDAP = require('ldapjs')
|
||||
const ActiveScope = require('../scopes/ActiveScope')
|
||||
const MFAToken = require('./MFAToken.model')
|
||||
const PasswordReset = require('./PasswordReset.model')
|
||||
const AppAuthorization = require('./AppAuthorization.model')
|
||||
const AppPassword = require('./AppPassword.model')
|
||||
const uuid = require('uuid/v4')
|
||||
|
||||
@@ -29,12 +30,38 @@ class User extends AuthUser {
|
||||
mfa_token: MFAToken,
|
||||
password_resets: [PasswordReset],
|
||||
app_passwords: [AppPassword],
|
||||
app_authorizations: [AppAuthorization],
|
||||
mfa_enabled: {type: Boolean, default: false},
|
||||
mfa_enable_date: Date,
|
||||
create_date: {type: Date, default: () => new Date},
|
||||
}}
|
||||
}
|
||||
|
||||
has_authorized(client) {
|
||||
return this.app_authorizations.some(x => x.client_id === client.id)
|
||||
}
|
||||
|
||||
get_authorization(client) {
|
||||
for ( const auth of this.app_authorizations ) {
|
||||
if ( auth.client_id === client.id )
|
||||
return auth
|
||||
}
|
||||
}
|
||||
|
||||
authorize(client) {
|
||||
if ( !this.has_authorized(client) ) {
|
||||
const client_rec = new AppAuthorization({
|
||||
client_id: client.id,
|
||||
api_scopes: client.api_scopes,
|
||||
}, this)
|
||||
|
||||
this.app_authorizations.push(client_rec)
|
||||
} else {
|
||||
const client_rec = this.get_authorization(client)
|
||||
client_rec.api_scopes = client.api_scopes
|
||||
}
|
||||
}
|
||||
|
||||
async to_api() {
|
||||
return {
|
||||
id: this.id,
|
||||
|
||||
Reference in New Issue
Block a user