Guest User

Untitled

a guest
Mar 8th, 2021
20
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.46 KB | None | 0 0
  1. package com.spacesofting.weshare.api.interceptor
  2.  
  3.  
  4. import android.util.Log
  5. import com.spacesofting.weshare.api.Api
  6. import com.spacesofting.weshare.common.Settings
  7. import com.spacesofting.weshare.mvp.Refresh
  8. import okhttp3.Interceptor
  9. import okhttp3.Request
  10. import okhttp3.Response
  11.  
  12. class AuthHeaderInterceptor : Interceptor {
  13.  
  14. private var isRefreshing = false
  15.  
  16. override fun intercept(chain: Interceptor.Chain): Response? {
  17. var accessToken = "Bearer " + Settings.AccessToken
  18. var originalRequest : Request = chain.request()
  19. val response: Response = chain.proceed(originalRequest )
  20.  
  21. val builder: Request.Builder = request.newBuilder()
  22. //todo первый раз прокатываем
  23. builder.header("Authorization", accessToken)// accessToken.getToken())
  24. builder.header("Content-Type", "application/json")
  25. builder.method(originalRequest .method(), originalRequest .body())
  26. originalRequest = builder.build()
  27. if (response.code() == 403 || response.code() == 401) {
  28. //todo получаем 403
  29. synchronized(this) {
  30. Log.e(
  31. "refreshToken",
  32. "Failed " + originalRequest .toString()
  33. .toString() + " with token -> " + accessToken // accessToken.getToken()
  34. )
  35. //todo получаем старый токен сюда
  36. val currentToken: String? =
  37. "Bearer " + Settings.AccessToken // accessToken.getToken()
  38. //todo если верный токен не null и верный как и главный то
  39. getRefreshToken(Settings.refreshToken) // в параметр кладем рефрешь
  40. if (Settings.AccessToken != null) {
  41. //todo подставляем новый токен
  42. //todo меняем хеддер
  43. builder.header("Authorization", "Bearer " + Settings.AccessToken)
  44. builder.header("Content-Type", "application/json")
  45. originalRequest = builder.build()
  46. Log.e("refreshToken", "Send " + originalRequest .toString().toString() + " again with new token -> " + accessToken)
  47. Log.e("refreshToken", "--------------------------------------------------------------------------------")
  48. //todo проигрываем старый запрос
  49. return chain.proceed(originalRequest )
  50. }
  51. }
  52. }
  53. Log.i("refreshToken", "req 200 with token -> " + accessToken)
  54. //todo возвращаем ответ
  55. return response
  56. }
  57.  
  58. @Synchronized
  59. @Throws(InterruptedException::class)
  60. fun getRefreshToken(refreshToken: String?) {
  61. if (!isRefreshing) {
  62. isRefreshing = true
  63. refreshToken?.let { it ->
  64. Api.Auth.getNewToken(Refresh(it))
  65. .map {
  66. Settings.AccessToken = it.accessToken
  67. Settings.refreshToken = it.refreshToken
  68. isRefreshing = false
  69. }
  70. //todo запрашиваем в основном потоке , потому что нам нужно подменить токен в моменте
  71. .blockingGet()
  72. }
  73. }
  74. }
  75. }
Advertisement
Add Comment
Please, Sign In to add comment