DockerERTFF/lib/modules/auth.js

72 lines
2.9 KiB
JavaScript

module.exports = {
provider: async function(options, name) {
const provider = await this.setAuthProvider(name, options);
return { identity: provider.identity };
},
identify: async function(options) {
const provider = await this.getAuthProvider(this.parseRequired(options.provider, 'string', 'auth.validate: provider is required.'));
return provider.identity;
},
validate: async function(options) {
const provider = await this.getAuthProvider(this.parseRequired(options.provider, 'string', 'auth.validate: provider is required.'));
const { action, username, password, remember } = this.req.body;
if (action == 'validate') {
return provider.validate(username, password);
}
if (action == 'login') {
return provider.login(username, password, remember);
}
if (action == 'logout') {
return provider.logout();
}
if (!provider.identity) {
return provider.unauthorized();
}
},
login: async function(options) {
const provider = await this.getAuthProvider(this.parseRequired(options.provider, 'string', 'auth.login: provider is required.'));
const username = this.parseOptional(options.username, 'string', this.parse('{{$_POST.username}}'));
const password = this.parseOptional(options.password, 'string', this.parse('{{$_POST.password}}'));
const remember = this.parseOptional(options.remember, '*', this.parse('{{$_POST.remember}}'));
return provider.login(username, password, remember);
},
logout: async function(options) {
const provider = await this.getAuthProvider(this.parseRequired(options.provider, 'string', 'auth.logout: provider is required.'));
return provider.logout();
},
restrict: async function(options) {
const provider = await this.getAuthProvider(this.parseRequired(options.provider, 'string', 'auth.restrict: provider is required.'));
return provider.restrict(this.parse(options));
},
impersonate: async function(options) {
const provider = await this.getAuthProvider(this.parseRequired(options.provider, 'string', 'auth.impersonate: provider is required.'));
const identity = this.parseRequired(options.identity, 'string', 'auth.impersonate: identity is required.');
return provider.impersonate(identity);
},
verify: async function(options) {
const provider = await this.getAuthProvider(this.parseRequired(options.provider, 'string', 'auth.verify: provider is required.'));
const username = this.parseRequired(options.username, 'string', 'auth.verify: username is required.');
const password = this.parseRequired(options.password, 'string', 'auth.verify: password is required.');
return provider.validate(username, password);
},
};