2021-03-24 18:36:34 -04:00
|
|
|
import ApplicationSerializer from './application';
|
|
|
|
|
|
|
|
|
|
export default class AuthMethodSerializer extends ApplicationSerializer {
|
2021-05-13 14:10:37 -04:00
|
|
|
// =methods
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Delegates to a type-specific serialization, or default.
|
|
|
|
|
* @override
|
|
|
|
|
* @param {Snapshot} snapshot
|
|
|
|
|
* @return {object}
|
|
|
|
|
*/
|
|
|
|
|
serialize(snapshot) {
|
|
|
|
|
switch (snapshot.record.type) {
|
|
|
|
|
case 'oidc':
|
|
|
|
|
return this.serializeOIDC(...arguments);
|
|
|
|
|
default:
|
|
|
|
|
return this.serializeDefault(...arguments);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Default serialization omits `attributes`.
|
|
|
|
|
* @return {object}
|
|
|
|
|
*/
|
|
|
|
|
serializeDefault() {
|
|
|
|
|
let serialized = super.serialize(...arguments);
|
|
|
|
|
delete serialized.attributes;
|
|
|
|
|
return serialized;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* If `adapterOptions.state` is set, the serialization should
|
|
|
|
|
* include **only state** and version. Normally, this is not serialized.
|
|
|
|
|
* @param {Snapshot} snapshot
|
|
|
|
|
* @return {object}
|
|
|
|
|
*/
|
|
|
|
|
serializeOIDC(snapshot) {
|
|
|
|
|
let serialized = super.serialize(...arguments);
|
|
|
|
|
const state = snapshot?.adapterOptions?.state;
|
|
|
|
|
if (state) {
|
|
|
|
|
serialized = this.serializeOIDCWithState(snapshot, state);
|
|
|
|
|
} else {
|
|
|
|
|
delete serialized.attributes.state;
|
|
|
|
|
}
|
|
|
|
|
return serialized;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Returns a payload containing only state and version.
|
|
|
|
|
* @param {Snapshot} snapshot
|
|
|
|
|
* @param {string} state
|
|
|
|
|
* @return {object}
|
|
|
|
|
*/
|
|
|
|
|
serializeOIDCWithState(snapshot, state) {
|
|
|
|
|
return {
|
|
|
|
|
version: snapshot.attr('version'),
|
|
|
|
|
attributes: { state },
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
|
2021-03-24 18:36:34 -04:00
|
|
|
/**
|
2021-04-14 11:28:07 -04:00
|
|
|
* Sorts the array in order of "is_primary" such that the primary method
|
|
|
|
|
* appears first. The "natural" order of auth methods places primary first.
|
2021-03-24 18:36:34 -04:00
|
|
|
*
|
|
|
|
|
* @override
|
|
|
|
|
* @return {object}
|
|
|
|
|
*/
|
|
|
|
|
normalizeArrayResponse() {
|
|
|
|
|
const normalized = super.normalizeArrayResponse(...arguments);
|
|
|
|
|
normalized.data = normalized.data.sort((a) =>
|
2021-04-14 11:28:07 -04:00
|
|
|
a.attributes.is_primary ? -1 : 1
|
2021-03-24 18:36:34 -04:00
|
|
|
);
|
|
|
|
|
return normalized;
|
|
|
|
|
}
|
2021-04-14 14:36:51 -04:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Sets `is_primary` to `false` if it is missing in the response. The API
|
|
|
|
|
* omits "zero" values per:
|
|
|
|
|
* https://developers.google.com/protocol-buffers/docs/proto3#default
|
|
|
|
|
*
|
|
|
|
|
* TODO: generalize this so that all zero values are reified.
|
|
|
|
|
* @override
|
|
|
|
|
* @return {object}
|
|
|
|
|
*/
|
|
|
|
|
normalize() {
|
|
|
|
|
const normalized = super.normalize(...arguments);
|
|
|
|
|
if (!normalized.data.attributes.is_primary) {
|
|
|
|
|
normalized.data.attributes.is_primary = false;
|
|
|
|
|
}
|
|
|
|
|
return normalized;
|
|
|
|
|
}
|
2021-03-24 18:36:34 -04:00
|
|
|
}
|