From e91612b3136116890057dcd600b31660330552d6 Mon Sep 17 00:00:00 2001 From: Randall Morey Date: Wed, 12 May 2021 17:12:59 -0400 Subject: [PATCH] =?UTF-8?q?feat:=20=F0=9F=8E=B8=20implement=20basic=20OIDC?= =?UTF-8?q?=20auth=20method=20attributes=20modeling?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- addons/api/addon/models/auth-method.js | 22 +++++++++++++++++++ .../models/fragment-auth-method-attributes.js | 17 ++++++++++++++ .../models/fragment-auth-method-attributes.js | 1 + .../mirage/generated/factories/auth-method.js | 18 +++++++++++++++ .../fragment-auth-method-attributes-test.js | 13 +++++++++++ 5 files changed, 71 insertions(+) create mode 100644 addons/api/addon/models/fragment-auth-method-attributes.js create mode 100644 addons/api/app/models/fragment-auth-method-attributes.js create mode 100644 addons/api/tests/unit/models/fragment-auth-method-attributes-test.js diff --git a/addons/api/addon/models/auth-method.js b/addons/api/addon/models/auth-method.js index 7686c2783..2874b0a67 100644 --- a/addons/api/addon/models/auth-method.js +++ b/addons/api/addon/models/auth-method.js @@ -1,9 +1,31 @@ import GeneratedAuthMethodModel from '../generated/models/auth-method'; +import { fragment } from 'ember-data-model-fragments/attributes'; import { equal } from '@ember/object/computed'; +export const signingAlgorithms = [ + 'RS256', + 'RS384', + 'RS512', + 'ES256', + 'ES384', + 'ES512', + 'PS256', + 'PS384', + 'PS512', + 'EdDSA', +]; + +export const states = ['inactive', 'active-private', 'active-public']; + export default class AuthMethodModel extends GeneratedAuthMethodModel { // =attributes + /** + * Attributes of this resource, if any, represented as a JSON fragment. + * @type {FragmentAuthMethodAttributesModel} + */ + @fragment('fragment-auth-method-attributes', { defaultValue: {} }) attributes; + /** * @type {boolean} */ diff --git a/addons/api/addon/models/fragment-auth-method-attributes.js b/addons/api/addon/models/fragment-auth-method-attributes.js new file mode 100644 index 000000000..a8ba64af5 --- /dev/null +++ b/addons/api/addon/models/fragment-auth-method-attributes.js @@ -0,0 +1,17 @@ +import Fragment from 'ember-data-model-fragments/fragment'; +import { attr } from '@ember-data/model'; + +export default class FragmentAuthMethodAttributesModel extends Fragment { + // =attributes (OIDC) + + @attr('string', { readOnly: true }) state; + @attr('string') issuer; + @attr('string') client_id; + @attr('string') client_secret; + @attr('string') client_secret_hmac; + @attr('number') max_age; + @attr('string') api_url_prefix; + @attr('string') callback_url; + @attr('boolean') disable_discovered_config_validation; + @attr('boolean') dry_run; +} diff --git a/addons/api/app/models/fragment-auth-method-attributes.js b/addons/api/app/models/fragment-auth-method-attributes.js new file mode 100644 index 000000000..46bd1e0f2 --- /dev/null +++ b/addons/api/app/models/fragment-auth-method-attributes.js @@ -0,0 +1 @@ +export { default } from 'api/models/fragment-auth-method-attributes'; diff --git a/addons/api/mirage/generated/factories/auth-method.js b/addons/api/mirage/generated/factories/auth-method.js index 6ea181f58..8fd338a53 100644 --- a/addons/api/mirage/generated/factories/auth-method.js +++ b/addons/api/mirage/generated/factories/auth-method.js @@ -11,4 +11,22 @@ export default Factory.extend({ created_time: () => date.recent(), updated_time: () => date.recent(), disabled: () => datatype.boolean(), + + attributes: function () { + let attrs; + switch (this.type) { + case 'oidc': + attrs = { + api_url_prefix: 'http://127.0.0.1:9200', + callback_url: + 'http://127.0.0.1:9200/v1/auth-methods/oidc:authenticate:callback', + client_id: 'YTwdJBB55LpKnuXb9n65', + client_secret_hmac: 'GY7blb4ynM5TEPNi_qnphJ9aDWhW8FpmN3D-eP_L7Zk', + issuer: 'http://127.0.0.1:57070', + state: 'active-public', + }; + break; + } + return attrs; + }, }); diff --git a/addons/api/tests/unit/models/fragment-auth-method-attributes-test.js b/addons/api/tests/unit/models/fragment-auth-method-attributes-test.js new file mode 100644 index 000000000..4dd985316 --- /dev/null +++ b/addons/api/tests/unit/models/fragment-auth-method-attributes-test.js @@ -0,0 +1,13 @@ +import { module, test } from 'qunit'; +import { setupTest } from 'ember-qunit'; + +module('Unit | Model | fragment auth method attributes', function (hooks) { + setupTest(hooks); + + // Replace this with your real tests. + test('it exists', function (assert) { + let store = this.owner.lookup('service:store'); + let model = store.createRecord('fragment-auth-method-attributes', {}); + assert.ok(model); + }); +});