2023-03-01 09:39:41 -06:00
|
|
|
/**
|
2026-01-28 17:09:06 -08:00
|
|
|
* Copyright IBM Corp. 2021, 2026
|
2024-05-31 11:29:24 -07:00
|
|
|
* SPDX-License-Identifier: BUSL-1.1
|
2023-03-01 09:39:41 -06:00
|
|
|
*/
|
|
|
|
|
|
2020-06-17 18:00:38 -04:00
|
|
|
import GeneratedAuthMethodModel from '../generated/models/auth-method';
|
2021-03-24 18:36:34 -04:00
|
|
|
import { equal } from '@ember/object/computed';
|
2020-06-17 18:00:38 -04:00
|
|
|
|
2023-05-11 15:15:31 -07:00
|
|
|
export const TYPE_AUTH_METHOD_PASSWORD = 'password';
|
|
|
|
|
export const TYPE_AUTH_METHOD_OIDC = 'oidc';
|
|
|
|
|
export const TYPE_AUTH_METHOD_LDAP = 'ldap';
|
|
|
|
|
|
|
|
|
|
export const TYPES_AUTH_METHOD = Object.freeze([
|
|
|
|
|
TYPE_AUTH_METHOD_PASSWORD,
|
|
|
|
|
TYPE_AUTH_METHOD_OIDC,
|
|
|
|
|
TYPE_AUTH_METHOD_LDAP,
|
|
|
|
|
]);
|
|
|
|
|
|
2021-05-14 12:05:09 -04:00
|
|
|
/**
|
2021-06-01 22:29:19 -04:00
|
|
|
* Enum options per auth method type and field.
|
2021-05-14 12:05:09 -04:00
|
|
|
*/
|
|
|
|
|
export const options = {
|
2023-07-27 14:25:40 -07:00
|
|
|
state: ['inactive', 'active-private', 'active-public'],
|
2021-05-14 12:05:09 -04:00
|
|
|
oidc: {
|
2021-05-20 18:00:48 -04:00
|
|
|
signing_algorithms: [
|
2021-05-14 12:05:09 -04:00
|
|
|
'RS256',
|
|
|
|
|
'RS384',
|
|
|
|
|
'RS512',
|
|
|
|
|
'ES256',
|
|
|
|
|
'ES384',
|
|
|
|
|
'ES512',
|
|
|
|
|
'PS256',
|
|
|
|
|
'PS384',
|
|
|
|
|
'PS512',
|
|
|
|
|
'EdDSA',
|
|
|
|
|
],
|
|
|
|
|
account_claim_maps: {
|
|
|
|
|
to: ['sub', 'name', 'email'],
|
|
|
|
|
},
|
2023-12-08 09:17:36 -08:00
|
|
|
prompts: ['consent', 'select_account', 'login'],
|
2021-05-14 12:05:09 -04:00
|
|
|
},
|
2023-07-13 09:19:38 -04:00
|
|
|
ldap: {
|
|
|
|
|
account_attribute_maps: {
|
|
|
|
|
to: ['fullName', 'email'],
|
|
|
|
|
},
|
2023-09-20 09:18:30 -07:00
|
|
|
dereference_aliases: {
|
|
|
|
|
NeverDerefAliases: 'never',
|
|
|
|
|
DerefInSearching: 'searching',
|
|
|
|
|
DerefFindingBaseObj: 'finding',
|
|
|
|
|
DerefAlways: 'always',
|
|
|
|
|
},
|
2023-07-13 09:19:38 -04:00
|
|
|
},
|
2021-05-14 12:05:09 -04:00
|
|
|
};
|
2021-05-12 17:12:59 -04:00
|
|
|
|
2021-03-16 15:41:13 -04:00
|
|
|
export default class AuthMethodModel extends GeneratedAuthMethodModel {
|
|
|
|
|
// =attributes
|
|
|
|
|
|
2021-03-26 12:47:49 -04:00
|
|
|
/**
|
|
|
|
|
* @type {boolean}
|
|
|
|
|
*/
|
2021-04-14 11:28:07 -04:00
|
|
|
@equal('is_primary', true) isPrimary;
|
2021-04-01 15:24:49 -04:00
|
|
|
|
2022-01-14 16:56:59 -05:00
|
|
|
options = options;
|
|
|
|
|
|
2021-03-16 15:41:13 -04:00
|
|
|
/**
|
|
|
|
|
* @type {boolean}
|
|
|
|
|
*/
|
|
|
|
|
get isPassword() {
|
2023-05-11 15:15:31 -07:00
|
|
|
return this.type === TYPE_AUTH_METHOD_PASSWORD;
|
2021-03-16 15:41:13 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @type {boolean}
|
|
|
|
|
*/
|
|
|
|
|
get isOIDC() {
|
2023-05-11 15:15:31 -07:00
|
|
|
return this.type === TYPE_AUTH_METHOD_OIDC;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @type {boolean}
|
|
|
|
|
*/
|
|
|
|
|
get isLDAP() {
|
|
|
|
|
return this.type === TYPE_AUTH_METHOD_LDAP;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @type {boolean}
|
|
|
|
|
*/
|
|
|
|
|
get isUnknown() {
|
|
|
|
|
return !TYPES_AUTH_METHOD.includes(this.type);
|
2021-03-16 15:41:13 -04:00
|
|
|
}
|
2021-05-13 14:10:37 -04:00
|
|
|
|
2021-06-03 17:08:40 -04:00
|
|
|
/**
|
|
|
|
|
* @type {boolean}
|
|
|
|
|
*/
|
|
|
|
|
get isInactive() {
|
2022-11-23 14:40:07 -05:00
|
|
|
return this.state === 'inactive';
|
2021-06-03 17:08:40 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @type {boolean}
|
|
|
|
|
*/
|
|
|
|
|
get isPrivate() {
|
2022-11-23 14:40:07 -05:00
|
|
|
return this.state === 'active-private';
|
2021-06-03 17:08:40 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @type {boolean}
|
|
|
|
|
*/
|
|
|
|
|
get isPublic() {
|
2022-11-23 14:40:07 -05:00
|
|
|
return this.state === 'active-public';
|
2021-06-03 17:08:40 -04:00
|
|
|
}
|
|
|
|
|
|
2021-05-13 14:10:37 -04:00
|
|
|
// =methods
|
|
|
|
|
|
|
|
|
|
/**
|
2023-07-13 09:19:38 -04:00
|
|
|
* Change the active and visibility state of an OIDC and LDAP auth method
|
2021-05-13 14:10:37 -04:00
|
|
|
* given its ID.
|
2023-07-13 09:19:38 -04:00
|
|
|
* For OIDC and LDAP auth methods only.
|
2021-05-13 14:10:37 -04:00
|
|
|
* @param {[string]} state
|
|
|
|
|
* @param {object} options
|
|
|
|
|
* @param {object} options.adapterOptions
|
|
|
|
|
* @return {Promise}
|
|
|
|
|
*/
|
|
|
|
|
changeState(state, options = { adapterOptions: {} }) {
|
|
|
|
|
const defaultAdapterOptions = {
|
|
|
|
|
state,
|
|
|
|
|
};
|
2023-07-27 14:25:40 -07:00
|
|
|
if (this.isOIDC) {
|
|
|
|
|
defaultAdapterOptions.method = 'change-state';
|
|
|
|
|
}
|
2021-05-13 14:10:37 -04:00
|
|
|
return this.save({
|
|
|
|
|
...options,
|
|
|
|
|
adapterOptions: {
|
|
|
|
|
...defaultAdapterOptions,
|
|
|
|
|
...options.adapterOptions,
|
|
|
|
|
},
|
|
|
|
|
});
|
|
|
|
|
}
|
2021-03-16 15:41:13 -04:00
|
|
|
}
|