|
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; |
|
|