Files
threshold-ui/addons/api/addon/models/auth-method.js
T
Devon AndersonandDharini Jeeva d7b6eba2af [ICU-10024] feat: Revise auth-method model (#1762)
* feat: 🎸 Revised auth-method model

Revised auth-method model to include LDAP attributes

✅ Closes: ICU-10024

* chore: 🤖 create transform for `account_attribute_maps`

Create transform to handle `account_attribute_maps` array

* refactor: 💡 Refactor transform and serializer

Refactor `account_claims_map` transforms overall name and logic to be
used for `account_attributes_map`.  Also refactored serializer to
serialize auth-method data, by type.

✅ Closes: ICU-100024

* refactor: 💡 refactor transform

Refactor `account_claim_maps` transform.

* Update addons/api/addon/serializers/auth-method.js

changing naming of serialize method

Co-authored-by: Dharini Jeeva <dharini@hashicorp.com>

* refactor: 💡 refactor serializer

Refactor naming convention for serializer methods and added comments for
attributes.

* refactor: 💡 quick refactor

fixed name for method call in serializer

* refactor: 💡 refactor attributes and serializer

Refactor attributes for `auth-methods` to use the `for` option to select
which attribute belongs to which auth-method.

* Update auth-method.js

comment change

* refactor: 💡 rebase

rebase

* Update addons/api/addon/serializers/auth-method.js

Co-authored-by: Dharini Jeeva <dharini@hashicorp.com>

* Update addons/api/addon/serializers/auth-method.js

Co-authored-by: Dharini Jeeva <dharini@hashicorp.com>

* Update addons/api/addon/serializers/auth-method.js

Co-authored-by: Dharini Jeeva <dharini@hashicorp.com>

* Update addons/api/addon/serializers/auth-method.js

Co-authored-by: Dharini Jeeva <dharini@hashicorp.com>

* Update addons/api/addon/serializers/auth-method.js

Co-authored-by: Dharini Jeeva <dharini@hashicorp.com>

* refactor: 💡 refactor serialize attribute method

refactor serialize attribute method not not include type for password,
and instead let `serializePassword` handle serialization

* refactor: 💡 refactor serializer

Refcator serializer to not include password type in attribute serializer
and added `for` to one missing attribute.

* Update addons/api/addon/serializers/auth-method.js

Co-authored-by: Dharini Jeeva <dharini@hashicorp.com>

---------

Co-authored-by: Dharini Jeeva <dharini@hashicorp.com>
2023-07-13 09:19:38 -04:00

133 lines
2.5 KiB
JavaScript

/**
* Copyright (c) HashiCorp, Inc.
* SPDX-License-Identifier: MPL-2.0
*/
import GeneratedAuthMethodModel from '../generated/models/auth-method';
import { equal } from '@ember/object/computed';
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,
]);
/**
* Enum options per auth method type and field.
*/
export const options = {
oidc: {
signing_algorithms: [
'RS256',
'RS384',
'RS512',
'ES256',
'ES384',
'ES512',
'PS256',
'PS384',
'PS512',
'EdDSA',
],
state: ['inactive', 'active-private', 'active-public'],
account_claim_maps: {
to: ['sub', 'name', 'email'],
},
},
ldap: {
account_attribute_maps: {
to: ['fullName', 'email'],
},
state: ['inactive', 'active-private', 'active-public'],
},
};
export default class AuthMethodModel extends GeneratedAuthMethodModel {
// =attributes
/**
* @type {boolean}
*/
@equal('is_primary', true) isPrimary;
options = options;
/**
* @type {boolean}
*/
get isPassword() {
return this.type === TYPE_AUTH_METHOD_PASSWORD;
}
/**
* @type {boolean}
*/
get isOIDC() {
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);
}
/**
* @type {boolean}
*/
get isInactive() {
return this.state === 'inactive';
}
/**
* @type {boolean}
*/
get isPrivate() {
return this.state === 'active-private';
}
/**
* @type {boolean}
*/
get isPublic() {
return this.state === 'active-public';
}
// =methods
/**
* Change the active and visibility state of an OIDC and LDAP auth method
* given its ID.
* For OIDC and LDAP auth methods only.
* @param {[string]} state
* @param {object} options
* @param {object} options.adapterOptions
* @return {Promise}
*/
changeState(state, options = { adapterOptions: {} }) {
const defaultAdapterOptions = {
method: 'change-state',
state,
};
return this.save({
...options,
adapterOptions: {
...defaultAdapterOptions,
...options.adapterOptions,
},
});
}
}