All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.zalando.zhewbacca.TokenInfoConverter.scala Maven / Gradle / Ivy

The newest version!
package org.zalando.zhewbacca

import play.api.mvc.RequestHeader

object TokenInfoConverter {

  implicit class AuthenticatedRequestHeader(underlying: RequestHeader) {

    private val AccessTokenKey = "tokenInfo.access_token"
    private val ScopeKey = "tokenInfo.scope"
    private val ScopeSeparator = '|'
    private val TokenTypeKey = "tokenInfo.token_type"
    private val UidKey = "tokenInfo.uid"

    def tokenInfo: TokenInfo = {
      val accessToken = underlying.tags.getOrElse(AccessTokenKey, sys.error("access token not provided"))
      val scopeNames = underlying.tags.getOrElse(ScopeKey, sys.error("scope not provided"))
        .split(ScopeSeparator)
        .toSet
      val tokenType = underlying.tags.getOrElse(TokenTypeKey, sys.error("token type is not provided"))
      val uid = underlying.tags.getOrElse(UidKey, sys.error("user id is not provided"))

      TokenInfo(accessToken, Scope(scopeNames), tokenType, uid)
    }

    private[zhewbacca] def withTokenInfo(tokenInfo: TokenInfo): RequestHeader = {
      underlying
        .withTag(AccessTokenKey, tokenInfo.accessToken)
        .withTag(ScopeKey, tokenInfo.scope.names.mkString(ScopeSeparator.toString))
        .withTag(TokenTypeKey, tokenInfo.tokenType)
        .withTag(UidKey, tokenInfo.userUid)
    }
  }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy