Skip to content

Commit

Permalink
#181 Add organization in OAuth2 user mapper
Browse files Browse the repository at this point in the history
  • Loading branch information
To-om committed Apr 4, 2019
1 parent d16a2a8 commit 163e736
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 3 deletions.
11 changes: 10 additions & 1 deletion app/org/thp/cortex/services/mappers/GroupUserMapper.scala
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,9 @@ class GroupUserMapper(
nameAttrName: String,
rolesAttrName: Option[String],
groupAttrName: String,
organizationAttrName: Option[String],
defaultRoles: Seq[String],
defaultOrganization: Option[String],
groupsUrl: String,
mappings: Map[String, Seq[String]],
ws: WSClient,
Expand All @@ -31,7 +33,9 @@ class GroupUserMapper(
configuration.getOptional[String]("auth.sso.attributes.name").getOrElse("username"),
configuration.getOptional[String]("auth.sso.attributes.roles"),
configuration.getOptional[String]("auth.sso.attributes.groups").getOrElse(""),
configuration.getOptional[String]("auth.sso.attributes.organization"),
configuration.getOptional[Seq[String]]("auth.sso.defaultRoles").getOrElse(Seq()),
configuration.getOptional[String]("auth.sso.defaultOrganization"),
configuration.getOptional[String]("auth.sso.groups.url").getOrElse(""),
configuration.getOptional[Map[String, Seq[String]]]("auth.sso.groups.mappings").getOrElse(Map()),
ws,
Expand All @@ -50,10 +54,15 @@ class GroupUserMapper(
val fields = for {
login (jsValue \ loginAttrName).validate[String]
name (jsValue \ nameAttrName).validate[String]
organization organizationAttrName
.flatMap(o (jsValue \ o).asOpt[String])
.orElse(defaultOrganization)
.fold[JsResult[String]](JsError())(o JsSuccess(o))
} yield Fields(Json.obj(
"login" login,
"name" name,
"roles" roles))
"roles" roles,
"organization" organization))
fields match {
case JsSuccess(f, _) Future.successful(f)
case JsError(errors) Future.failed(AuthenticationError(s"User info fails: ${errors.map(_._1).mkString}"))
Expand Down
13 changes: 11 additions & 2 deletions app/org/thp/cortex/services/mappers/SimpleUserMapper.scala
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ package org.thp.cortex.services.mappers
import scala.concurrent.{ ExecutionContext, Future }

import play.api.Configuration
import play.api.libs.json.{ JsError, JsSuccess, JsValue, Json }
import play.api.libs.json._

import javax.inject.Inject

Expand All @@ -14,14 +14,18 @@ class SimpleUserMapper(
loginAttrName: String,
nameAttrName: String,
rolesAttrName: Option[String],
organizationAttrName: Option[String],
defaultRoles: Seq[String],
defaultOrganization: Option[String],
implicit val ec: ExecutionContext) extends UserMapper {

@Inject() def this(configuration: Configuration, ec: ExecutionContext) = this(
configuration.getOptional[String]("auth.sso.attributes.login").getOrElse("name"),
configuration.getOptional[String]("auth.sso.attributes.name").getOrElse("username"),
configuration.getOptional[String]("auth.sso.attributes.roles"),
configuration.getOptional[String]("auth.sso.attributes.organization"),
configuration.getOptional[Seq[String]]("auth.sso.defaultRoles").getOrElse(Seq()),
configuration.getOptional[String]("auth.sso.defaultOrganization"),
ec)

override val name: String = "simple"
Expand All @@ -31,10 +35,15 @@ class SimpleUserMapper(
login (jsValue \ loginAttrName).validate[String]
name (jsValue \ nameAttrName).validate[String]
roles = rolesAttrName.fold(defaultRoles)(r (jsValue \ r).asOpt[Seq[String]].getOrElse(defaultRoles))
organization organizationAttrName
.flatMap(o (jsValue \ o).asOpt[String])
.orElse(defaultOrganization)
.fold[JsResult[String]](JsError())(o JsSuccess(o))
} yield Fields(Json.obj(
"login" login,
"name" name,
"roles" roles))
"roles" roles,
"organization" organization))
fields match {
case JsSuccess(f, _) Future.successful(f)
case JsError(errors) Future.failed(AuthenticationError(s"User info fails: ${errors.map(_._1).mkString}"))
Expand Down

0 comments on commit 163e736

Please sign in to comment.