const { Model } = require('flitter-orm') class ClientModel extends Model { static get services() { return [...super.services, 'models', 'configs'] } static get schema() { return { name: String, user_id: String, active: { type: Boolean, default: true }, last_invocation: Date, } } static async create({ name, uid, password }) { const User = this.prototype.models.get('auth:User') const user = new User({ first_name: name, last_name: '(LDAP Agent)', uid: uid.toLowerCase(), roles: ['ldap_client'], }) await user.reset_password(password, 'create') await user.save() const client = new this({ name, user_id: user.id, }) await client.save() return client } async invoke() { this.last_invocation = new Date } async user() { const User = this.models.get('auth:User') return User.findById(this.user_id) } async application() { const Application = this.models.get('Application') return Application.findOne({ active: true, ldap_client_ids: this.id }) } async to_api() { const User = this.models.get('auth:User') const user = await User.findById(this.user_id) const role_permissions = user.roles.map(x => this.configs.get('auth.roles')[x]) return { id: this.id, name: this.name, user_id: user.id, uid: user.uid.toLowerCase(), last_invocation: this.last_invocation, permissions: [...user.permissions, ...role_permissions], } } } module.exports = exports = ClientModel