fork download
  1.  
  2. package models
  3. import scala.slick.driver.PostgresDriver.simple._
  4. import Database.threadLocalSession
  5. import securesocial.core.{ Identity, UserId, AuthenticationMethod, OAuth1Info, OAuth2Info, PasswordInfo }
  6.  
  7. /**
  8.   * Class that embodies the parameters of a User.
  9.   */
  10. case class User(
  11. id: UserId,
  12. firstName: String,
  13. lastName: String,
  14. userRoleID: Int,
  15. authMethod: AuthenticationMethod,
  16. avatarUrl: Option[String],
  17. email: Option[String],
  18. fullName: String,
  19. oAuth1Info: Option[OAuth1Info],
  20. oAuth2Info: Option[OAuth2Info],
  21. passwordInfo: Option[PasswordInfo]) extends Identity
  22.  
  23. object Users extends Table[User]("at_user") {
  24. def id = column[String]("id", O.PrimaryKey)
  25. def firstName = column[String]("first_name")
  26. def lastName = column[String]("last_name")
  27. def userRoleID = column[Int]("at_user_role_id")
  28. def authMethod = column[String]("auth_method")
  29. def avatarUrl = column[Option[String]]("avatar_url") // t._6
  30. def email = column[Option[String]]("email") // t._7
  31. def fullName = column[String]("full_name") // t._8
  32.  
  33. def oAuth1InfoToken = column[Option[String]]("oauth1info_token") // t._9
  34. def oAuth1InfoSecret = column[Option[String]]("oauth1info_secret") // t._10
  35.  
  36. def oAuth2InfoAccessToken = column[Option[String]]("oauth2info_access_token")
  37. def oAuth2InfoTokenType = column[Option[String]]("oauth2info_token_type")
  38. def oAuth2InfoExpiresIn = column[Option[Int]]("oauth2info_expires_in")
  39. def oAuth2InfoRefreshToken = column[Option[String]]("oauth2info_refresh_token")
  40.  
  41. def passwordInfoHasher = column[Option[String]]("passwordinfo_hasher") // t._15
  42. def passwordInfoPassword = column[Option[String]]("passwordinfo_password") // t._16
  43. def passwordInfoSalt = column[Option[String]]("passwordinfo_salt") // t._17
  44.  
  45. def userRole = foreignKey("user_role_fk", userRoleID, UserRoles)(_.id)
  46.  
  47. def oAuth1Unapply(smth: Option[OAuth1Info]): (String, String) =
  48. smth.map(oa => (oa.token, oa.secret)).getOrElse(("", ""))
  49.  
  50. def oAuth2Unapply(smth: Option[OAuth2Info]): (String, Option[String], Option[Int], Option[String]) =
  51. smth.map(oa => (oa.accessToken, oa.tokenType, oa.expiresIn, oa.refreshToken)).getOrElse(("", None, None, None))
  52.  
  53. def passInfoUnapply(smth: Option[PasswordInfo]): (String, String, Option[String]) =
  54. smth.map(p => (p.hasher, p.password, p.salt)).getOrElse(("", "", None))
  55.  
  56. def * = id ~ firstName ~ lastName ~ userRoleID ~ authMethod ~
  57. avatarUrl ~ email ~ fullName ~ oAuth1InfoToken ~ oAuth1InfoSecret ~
  58. oAuth2InfoAccessToken ~ oAuth2InfoTokenType ~ oAuth2InfoExpiresIn ~ oAuth2InfoRefreshToken ~
  59. passwordInfoHasher ~ passwordInfoPassword ~ passwordInfoSalt <> (
  60. { t =>
  61. User(
  62. UserId(t._1, "google"),
  63. t._2, t._3, t._4,
  64. AuthenticationMethod(t._5), t._6, t._7, t._8,
  65. Some(OAuth1Info((t._9).getOrElse(""), (t._10).getOrElse(""))),
  66. Some(OAuth2Info((t._11).getOrElse(""), t._12, t._13, t._14)),
  67. Some(PasswordInfo((t._15).getOrElse(""), (t._16).getOrElse(""), t._17)))
  68. }, {
  69. (r: User) =>
  70. val oa1 = oAuth1Unapply(r.oAuth1Info)
  71. val oa2 = oAuth2Unapply(r.oAuth2Info)
  72. val pin = passInfoUnapply(r.passwordInfo)
  73. Some(
  74. (r.id.id, r.firstName, r.lastName, r.userRoleID,
  75. r.authMethod.method, r.avatarUrl, r.email, r.fullName,
  76. Some(oa1._1), Some(oa1._2),
  77. Some(oa2._1), oa2._2, oa2._3, oa2._4,
  78. Some(pin._1), Some(pin._2), pin._3))
  79. })
  80. }
  81.  
  82. /**
  83.   * User table for accessing the database.
  84.   */
  85. case class UserRole(id: Option[Int], role: String)
  86. // XXX: Maybe this only needs to have only one field... have ROLE be the primary key?
  87. object UserRoles extends Table[UserRole]("at_user_role") {
  88. def id = column[Int]("id", O.PrimaryKey, O.AutoInc)
  89. def role = column[String]("role")
  90. // ...
  91. def * = id.? ~ role <> (UserRole, UserRole.unapply _)
  92. //def forInsert = role <> ({t => UserRole(None, t._1)}, {(r: UserRole) => Some((r.role))}) returning id
  93. }
  94.  
Not running #stdin #stdout 0s 0KB
stdin
stdout
Standard output is empty