in pan-domain-auth-verification/src/main/scala/com/gu/pandomainauth/service/CookieUtils.scala [20:52]
private[service] def serializeAuthenticatedUser(authUser: AuthenticatedUser): String =
s"firstName=${authUser.user.firstName}" +
s"&lastName=${authUser.user.lastName}" +
s"&email=${authUser.user.email}" +
authUser.user.avatarUrl.map(a => s"&avatarUrl=$a").getOrElse("") +
s"&system=${authUser.authenticatingSystem}" +
s"&authedIn=${authUser.authenticatedIn.mkString(",")}" +
s"&expires=${authUser.expires.toEpochMilli}" +
s"&multifactor=${authUser.multiFactor}"
private[service] def deserializeAuthenticatedUser(serializedForm: String): Option[AuthenticatedUser] = {
val data = serializedForm
.split("&")
.map(_.split("=", 2))
.map{p => p(0) -> p(1)}
.toMap
for {
firstName <- data.get("firstName")
lastName <- data.get("lastName")
email <- data.get("email")
system <- data.get("system")
authedIn <- data.get("authedIn")
expires <- data.get("expires").flatMap(text => Try(text.toLong).toOption)
multiFactor <- data.get("multifactor").flatMap(text => Try(text.toBoolean).toOption)
} yield AuthenticatedUser(
user = User(firstName, lastName, email, data.get("avatarUrl")),
authenticatingSystem = system,
authenticatedIn = Set(authedIn.split(",").toSeq :_*),
expires = Instant.ofEpochMilli(expires),
multiFactor = multiFactor
)
}