token.js 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. var gettokenid = null
  2. /**
  3. * 初始化授权信息
  4. * @param {object} params OA系统参数
  5. */
  6. function initAuthParams(params) {
  7. wps.PluginStorage.setItem('cookie', Base64.decode(params.cookie))
  8. var refcookie = Base64.decode(params.refresh_token)
  9. wps.PluginStorage.setItem('refurl', refcookie.split('|')[0])
  10. wps.PluginStorage.setItem('refresh_token', refcookie.split('|')[1])
  11. wps.PluginStorage.setItem(
  12. constStrEnum.IsSilentMode,
  13. params.fileparam.IsMaximization == false
  14. )
  15. }
  16. /**
  17. * 获取可用token
  18. * 青格勒 2021年5月6日
  19. * @returns
  20. */
  21. function GetToken() {
  22. return new Promise(function (resolve, reject) {
  23. let lastExpires = wps.PluginStorage.getItem('token_expires_in')
  24. let token = wps.PluginStorage.getItem('cookie')
  25. if (token && lastExpires && lastExpires > Date.now()) {
  26. resolve(token.indexOf('Bearer') < 0 ? 'Bearer ' + token : token)
  27. } else {
  28. loginfo('重新获取操作token')
  29. //过期重新获取token
  30. var xhr = new XMLHttpRequest()
  31. var refresh_token = wps.PluginStorage.getItem('refresh_token')
  32. xhr.open('POST', wps.PluginStorage.getItem('refurl'))
  33. xhr.onreadystatechange = function () {
  34. var nextTime = 2e3
  35. if (xhr.readyState == 4) {
  36. if (xhr.status == 200) {
  37. var returnvalue = JSON.parse(xhr.response)
  38. let token = 'Bearer ' + returnvalue.access_token
  39. wps.PluginStorage.setItem('cookie', token)
  40. wps.PluginStorage.setItem(
  41. 'token_expires_in',
  42. returnvalue.expires_in * 1000 + Date.now()
  43. )
  44. wps.PluginStorage.setItem(
  45. 'refresh_token',
  46. returnvalue.refresh_token
  47. )
  48. nextTime = Math.min(
  49. ~(1 << 31),
  50. returnvalue.expires_refresh * 1000 - 10000
  51. )
  52. if (!gettokenid) gettokenid = setTimeout(AutoRefreshToken, nextTime)
  53. resolve(token)
  54. } else {
  55. loginfo('获取token失败:' + xhr.status + ';' + xhr.responseText)
  56. toggleBeforeOAfterLoading()
  57. reject(xhr.status)
  58. }
  59. }
  60. }
  61. xhr.setRequestHeader('Cache-Control', 'no-cache')
  62. xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded')
  63. xhr.send('token=' + refresh_token)
  64. }
  65. })
  66. }
  67. /**
  68. * 自动刷新token
  69. */
  70. function AutoRefreshToken() {
  71. loginfo('自动刷新refresh_token')
  72. var xhr = new XMLHttpRequest()
  73. var refcookie = wps.PluginStorage.getItem('refresh_token')
  74. xhr.open('POST', wps.PluginStorage.getItem('refurl'))
  75. xhr.onreadystatechange = function () {
  76. if (xhr.readyState == 4) {
  77. let nextTime = 300
  78. if (xhr.status == 200) {
  79. var returnvalue = JSON.parse(xhr.response)
  80. wps.PluginStorage.setItem(
  81. 'cookie',
  82. 'Bearer ' + returnvalue.access_token
  83. )
  84. wps.PluginStorage.setItem(
  85. 'token_expires_in',
  86. returnvalue.expires_in * 1000 + Date.now()
  87. )
  88. wps.PluginStorage.setItem('refresh_token', returnvalue.refresh_token)
  89. loginfo('自动刷新refresh_token成功')
  90. nextTime = Math.min(
  91. ~(1 << 31),
  92. returnvalue.expires_refresh * 1000 - 10000
  93. )
  94. gettokenid = setTimeout(AutoRefreshToken, nextTime)
  95. } else {
  96. logerr(`刷新token报错:${xhr.status}:${xhr.responseText}`)
  97. ShowConfirm(
  98. '由于用户身份信息失效,修改将无法提交。未防止修改丢失,请将文档另存到本地目录',
  99. 'warning',
  100. {
  101. btns: [
  102. {
  103. key: 'saveas',
  104. text: '另存为',
  105. primary: true,
  106. close: true,
  107. callback: function () {
  108. var doc = GetCurrentDocument()
  109. var dialog = wps.Application.FileDialog(2)
  110. dialog.InitialFileName = doc.FullName
  111. if (dialog.Show() == -1) {
  112. dialog.Execute()
  113. SetDocParamsValue(doc, 'Persist', true)
  114. Heart.CloseOADocument(doc)
  115. OnWindowActivate()
  116. }
  117. },
  118. },
  119. ],
  120. }
  121. )
  122. return
  123. }
  124. }
  125. }
  126. xhr.setRequestHeader('Cache-Control', 'no-cache')
  127. xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded')
  128. xhr.send('token=' + refcookie)
  129. }