Token.kt 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. package com.grkj.iscs
  2. import android.content.Context
  3. import android.content.SharedPreferences
  4. import java.util.concurrent.TimeUnit
  5. class Token(
  6. val accessToken: String,
  7. val refreshToken: String,
  8. val expiresIn: Int = 0,
  9. val expiresAt: Long
  10. ) {
  11. fun saveToSp(context:Context): Boolean {
  12. val now = System.currentTimeMillis() / 1000
  13. return tokenSp(context).edit()
  14. .putString("accessToken", accessToken)
  15. .putString("refreshToken", refreshToken)
  16. .putLong("expiresAt", expiresIn + now - 60)
  17. .putLong("refreshExpiresAt", TimeUnit.DAYS.toSeconds(7) + now - 60)
  18. .commit()
  19. }
  20. fun isValid(): Boolean {
  21. return expiresAt < 0 || expiresAt > System.currentTimeMillis() / 1000
  22. }
  23. companion object {
  24. fun fromSp(context:Context): Token? {
  25. val sp = tokenSp(context)
  26. val accessToken = sp.getString("accessToken", null)
  27. val refreshToken = sp.getString("refreshToken", null)
  28. if (accessToken == null || refreshToken == null) {
  29. return null
  30. }
  31. val refreshExpiresAt = sp.getLong("refreshExpiresAt", 0)
  32. val now = System.currentTimeMillis() / 1000
  33. if (refreshExpiresAt < now) {
  34. return null
  35. }
  36. val expiresAt = sp.getLong("expiresAt", 0)
  37. return Token(accessToken, refreshToken, expiresAt = expiresAt)
  38. }
  39. fun clear(context: Context) : Boolean {
  40. return tokenSp(context).edit()
  41. .putString("accessToken", null)
  42. .putString("refreshToken", null)
  43. .putLong("expiresAt", 0)
  44. .putLong("refreshExpiresAt", 0)
  45. .commit()
  46. }
  47. private fun tokenSp(context: Context): SharedPreferences {
  48. return context.getSharedPreferences("token", Context.MODE_PRIVATE)
  49. }
  50. }
  51. }