UserOauthController.js 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. define(['base'], App =>
  2. App.controller('UserOauthController', [
  3. '$http',
  4. '$scope',
  5. '$q',
  6. '_',
  7. 'UserOauthDataService',
  8. function($http, $scope, $q, _, UserOauthDataService) {
  9. const _monitorRequest = function(promise) {
  10. $scope.ui.hasError = false
  11. $scope.ui.isLoadingV1Ids = true
  12. promise
  13. .catch(response => {
  14. $scope.ui.hasError = true
  15. $scope.ui.errorMessage =
  16. response && response.data && response.data.message
  17. ? response.data.message
  18. : 'error'
  19. })
  20. .finally(() => {
  21. $scope.ui.isLoadingV1Ids = false
  22. })
  23. return promise
  24. }
  25. const _reset = function() {
  26. $scope.ui = {
  27. hasError: false,
  28. errorMessage: '',
  29. isLoadingV1Ids: false
  30. }
  31. $scope.providers = window.oauthProviders
  32. $scope.thirdPartyIds = window.thirdPartyIds
  33. // $scope.v2ThirdPartyIds can be removed post user-c11n
  34. // until v1 is authoritative we will use v1 SSO data for providers
  35. // except collabratec, which will only write to v2.
  36. // post user-c11n, oauthFallback setting will be removed and
  37. // we will only use data from v2
  38. $scope.v2ThirdPartyIds = window.thirdPartyIds
  39. }
  40. const _getUserV1OauthProviders = () => {
  41. $scope.ui.isLoadingV1Ids = true
  42. return _monitorRequest(UserOauthDataService.getUserOauthV1()).then(
  43. thirdPartyIds => {
  44. $scope.thirdPartyIds = thirdPartyIds
  45. }
  46. )
  47. }
  48. const _unlinkError = (providerId, err) => {
  49. $scope.providers[providerId].ui.hasError = true
  50. $scope.providers[providerId].ui.errorMessage =
  51. err && err.data && err.data.message ? err.data.message : 'error'
  52. }
  53. $scope.unlink = providerId => {
  54. if (window.ExposedSettings.isOverleaf) {
  55. // UI
  56. $scope.providers[providerId].ui = {
  57. hasError: false,
  58. isProcessing: true
  59. }
  60. // Data for update
  61. const data = {
  62. link: false,
  63. providerId
  64. }
  65. $http
  66. .post('/user/oauth-unlink', data)
  67. .catch(error => {
  68. $scope.providers[providerId].ui.isProcessing = false
  69. _unlinkError(providerId, error)
  70. })
  71. .then(response => {
  72. $scope.providers[providerId].ui.isProcessing = false
  73. if (response.status === 200) {
  74. $scope.thirdPartyIds[providerId] = null
  75. // v2thirdPartyIds below can be removed post user c11n
  76. $scope.v2ThirdPartyIds[providerId] = null
  77. } else {
  78. _unlinkError(providerId, response)
  79. }
  80. })
  81. }
  82. }
  83. _reset()
  84. if (window.oauthFallback) {
  85. _getUserV1OauthProviders()
  86. }
  87. }
  88. ]))