From 1f454ababf64d83dbf0e34514ab47f3e2e432712 Mon Sep 17 00:00:00 2001 From: Julien Fontanet Date: Wed, 16 Sep 2015 11:12:42 +0200 Subject: [PATCH] Support custom username field. --- packages/xo-server-auth-saml/README.md | 5 +++++ packages/xo-server-auth-saml/src/index.js | 22 +++++++++++++++++++++- 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/packages/xo-server-auth-saml/README.md b/packages/xo-server-auth-saml/README.md index 0f4bab5a4..0560d4b57 100644 --- a/packages/xo-server-auth-saml/README.md +++ b/packages/xo-server-auth-saml/README.md @@ -38,6 +38,11 @@ plugins: # Issuer string to supply the identity provider. issuer: 'xen-orchestra' + + # Field to use as the name of the user. + # + # Default: uid. + usernameField: 'uid' ``` ## Development diff --git a/packages/xo-server-auth-saml/src/index.js b/packages/xo-server-auth-saml/src/index.js index 6991f7656..4e2cc74a3 100644 --- a/packages/xo-server-auth-saml/src/index.js +++ b/packages/xo-server-auth-saml/src/index.js @@ -2,15 +2,35 @@ import {Strategy} from 'passport-saml' // =================================================================== +function extract (obj, prop, defaultValue = undefined) { + if (prop in obj) { + const value = obj[prop] + delete obj[prop] + + return value + } + + return defaultValue +} + +// =================================================================== + class AuthSamlXoPlugin { constructor (conf) { + this._usernameField = extract(conf, 'usernameField', 'uid') this._conf = conf } load (xo) { xo.registerPassportStrategy(new Strategy(this._conf, async (profile, done) => { + const name = profile[this._usernameField] + if (!name) { + done('no name found for this user') + return + } + try { - done(null, await xo.registerUser('saml', profile.uid)) + done(null, await xo.registerUser('saml', name)) } catch (error) { done(error.message) }