80 lines
1.9 KiB
JavaScript
80 lines
1.9 KiB
JavaScript
import App from './app.js';
|
|
import AppAuthClient from './app-auth-client.js';
|
|
import Base from './base.js';
|
|
|
|
class AppConfig extends Base {
|
|
static tableName = 'app_configs';
|
|
|
|
static get idColumn() {
|
|
return 'key';
|
|
}
|
|
|
|
static jsonSchema = {
|
|
type: 'object',
|
|
required: ['key'],
|
|
|
|
properties: {
|
|
id: { type: 'string', format: 'uuid' },
|
|
key: { type: 'string' },
|
|
connectionAllowed: { type: 'boolean', default: false },
|
|
customConnectionAllowed: { type: 'boolean', default: false },
|
|
shared: { type: 'boolean', default: false },
|
|
disabled: { type: 'boolean', default: false },
|
|
createdAt: { type: 'string' },
|
|
updatedAt: { type: 'string' },
|
|
},
|
|
};
|
|
|
|
static relationMappings = () => ({
|
|
appAuthClients: {
|
|
relation: Base.HasManyRelation,
|
|
modelClass: AppAuthClient,
|
|
join: {
|
|
from: 'app_configs.key',
|
|
to: 'app_auth_clients.app_key',
|
|
},
|
|
},
|
|
});
|
|
|
|
async getApp() {
|
|
if (!this.key) return null;
|
|
|
|
return await App.findOneByKey(this.key);
|
|
}
|
|
|
|
async computeAndAssignConnectionAllowedProperty() {
|
|
this.connectionAllowed = await this.computeConnectionAllowedProperty();
|
|
}
|
|
|
|
async computeConnectionAllowedProperty() {
|
|
const appAuthClients = await this.$relatedQuery('appAuthClients');
|
|
|
|
const hasSomeActiveAppAuthClients =
|
|
appAuthClients?.some((appAuthClient) => appAuthClient.active) || false;
|
|
|
|
const conditions = [
|
|
hasSomeActiveAppAuthClients,
|
|
this.shared,
|
|
!this.disabled,
|
|
];
|
|
|
|
const connectionAllowed = conditions.every(Boolean);
|
|
|
|
return connectionAllowed;
|
|
}
|
|
|
|
async $beforeInsert(queryContext) {
|
|
await super.$beforeInsert(queryContext);
|
|
|
|
await this.computeAndAssignConnectionAllowedProperty();
|
|
}
|
|
|
|
async $beforeUpdate(opt, queryContext) {
|
|
await super.$beforeUpdate(opt, queryContext);
|
|
|
|
await this.computeAndAssignConnectionAllowedProperty();
|
|
}
|
|
}
|
|
|
|
export default AppConfig;
|