60 lines
1.4 KiB
JavaScript
60 lines
1.4 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 jsonSchema = {
|
|
type: 'object',
|
|
required: ['key'],
|
|
|
|
properties: {
|
|
id: { type: 'string', format: 'uuid' },
|
|
key: { type: 'string' },
|
|
allowCustomConnection: { type: 'boolean', default: false },
|
|
shared: { type: 'boolean', default: false },
|
|
disabled: { type: 'boolean', default: false },
|
|
},
|
|
};
|
|
|
|
static relationMappings = () => ({
|
|
appAuthClients: {
|
|
relation: Base.HasManyRelation,
|
|
modelClass: AppAuthClient,
|
|
join: {
|
|
from: 'app_configs.key',
|
|
to: 'app_auth_clients.app_key',
|
|
},
|
|
},
|
|
});
|
|
|
|
static get virtualAttributes() {
|
|
return ['canConnect', 'canCustomConnect'];
|
|
}
|
|
|
|
get canCustomConnect() {
|
|
return !this.disabled && this.allowCustomConnection;
|
|
}
|
|
|
|
get canConnect() {
|
|
const hasSomeActiveAppAuthClients = !!this.appAuthClients?.some(
|
|
(appAuthClient) => appAuthClient.active
|
|
);
|
|
const shared = this.shared;
|
|
const active = this.disabled === false;
|
|
|
|
const conditions = [hasSomeActiveAppAuthClients, shared, active];
|
|
|
|
return conditions.every(Boolean);
|
|
}
|
|
|
|
async getApp() {
|
|
if (!this.key) return null;
|
|
|
|
return await App.findOneByKey(this.key);
|
|
}
|
|
}
|
|
|
|
export default AppConfig;
|