Browse Source

feat: CAS authentication module (#5452)

Co-authored-by: SeaLife <mtries@united-internet.de>
Mirco T 2 years ago
parent
commit
628c72ea16

+ 13 - 3
server/modules/authentication/cas/authentication.js

@@ -1,3 +1,4 @@
+const _ = require('lodash')
 /* global WIKI */
 /* global WIKI */
 
 
 // ------------------------------------
 // ------------------------------------
@@ -10,15 +11,24 @@ module.exports = {
   init (passport, conf) {
   init (passport, conf) {
     passport.use(conf.key,
     passport.use(conf.key,
       new CASStrategy({
       new CASStrategy({
-        ssoBaseURL: conf.ssoBaseURL,
-        serverBaseURL: conf.serverBaseURL,
+        version: conf.casVersion,
+        ssoBaseURL: conf.casUrl,
+        serverBaseURL: conf.baseUrl,
+        serviceURL: conf.callbackURL,
         passReqToCallback: true
         passReqToCallback: true
       }, async (req, profile, cb) => {
       }, async (req, profile, cb) => {
         try {
         try {
           const user = await WIKI.models.users.processProfile({
           const user = await WIKI.models.users.processProfile({
             providerKey: req.params.strategy,
             providerKey: req.params.strategy,
-            profile
+            profile: {
+              ...profile,
+              id: _.get(profile.attributes, conf.uniqueIdAttribute, profile.user),
+              email: _.get(profile.attributes, conf.emailAttribute),
+              name: _.get(profile.attributes, conf.displayNameAttribute, profile.user),
+              picture: ''
+            }
           })
           })
+
           cb(null, user)
           cb(null, user)
         } catch (err) {
         } catch (err) {
           cb(err, null)
           cb(err, null)

+ 33 - 2
server/modules/authentication/cas/definition.yml

@@ -6,6 +6,37 @@ logo: https://static.requarks.io/logo/cas.svg
 color: green darken-2
 color: green darken-2
 website: https://apereo.github.io/cas/
 website: https://apereo.github.io/cas/
 useForm: false
 useForm: false
+isAvailable: true
 props:
 props:
-  ssoBaseURL: String
-  serverBaseURL: String
+  baseUrl:
+    type: String
+    title: Base URL
+    hint: 'Base-URL of your WikiJS (for example: https://wiki.example.com)'
+    order: 1
+  casUrl:
+    type: String
+    title: URL to the CAS Server
+    hint: 'Base-URL of the CAS server, including context path. (for example: https://login.company.com/cas)'
+    order: 2
+  casVersion:
+    type: String
+    title: CAS Version
+    hint: 'The version of CAS to use'
+    order: 3
+    enum:
+      - CAS3.0
+      - CAS1.0
+    default: 'CAS3.0'
+  emailAttribute:
+    type: String
+    title: Attribute key which contains the users email
+    default: email
+    order: 4
+  displayNameAttribute:
+    type: String
+    title: Attribute key which contains the users display name (leave empty if there is none)
+    order: 5
+  uniqueIdAttribute:
+    type: String
+    title: Attribute key which contains the unique identifier of a user. (if empty, username will be used)
+    order: 6