|
|
@@ -1,18 +1,14 @@
|
|
|
define(['base'], App =>
|
|
|
App.controller('UserOauthController', [
|
|
|
+ '$http',
|
|
|
'$scope',
|
|
|
'$q',
|
|
|
'_',
|
|
|
'UserOauthDataService',
|
|
|
- function($scope, $q, _, UserOauthDataService) {
|
|
|
- $scope.providers = [
|
|
|
- { key: 'google', name: 'Google' },
|
|
|
- { key: 'orcid', name: 'Orcid' },
|
|
|
- { key: 'twitter', name: 'Twitter' }
|
|
|
- ]
|
|
|
+ function($http, $scope, $q, _, UserOauthDataService) {
|
|
|
const _monitorRequest = function(promise) {
|
|
|
$scope.ui.hasError = false
|
|
|
- $scope.ui.isLoadingProviders = true
|
|
|
+ $scope.ui.isLoadingV1Ids = true
|
|
|
promise
|
|
|
.catch(response => {
|
|
|
$scope.ui.hasError = true
|
|
|
@@ -22,7 +18,7 @@ define(['base'], App =>
|
|
|
: 'error'
|
|
|
})
|
|
|
.finally(() => {
|
|
|
- $scope.ui.isLoadingProviders = false
|
|
|
+ $scope.ui.isLoadingV1Ids = false
|
|
|
})
|
|
|
return promise
|
|
|
}
|
|
|
@@ -30,19 +26,65 @@ define(['base'], App =>
|
|
|
$scope.ui = {
|
|
|
hasError: false,
|
|
|
errorMessage: '',
|
|
|
- isLoadingProviders: false
|
|
|
+ isLoadingV1Ids: false
|
|
|
}
|
|
|
- $scope.userProviders = {}
|
|
|
+ $scope.providers = window.oauthProviders
|
|
|
+ $scope.thirdPartyIds = window.thirdPartyIds
|
|
|
+ // $scope.v2ThirdPartyIds can be removed post user-c11n
|
|
|
+ // until v1 is authoritative we will use v1 SSO data for providers
|
|
|
+ // except collabratec, which will only write to v2.
|
|
|
+ // post user-c11n, oauthFallback setting will be removed and
|
|
|
+ // we will only use data from v2
|
|
|
+ $scope.v2ThirdPartyIds = window.thirdPartyIds
|
|
|
}
|
|
|
const _getUserV1OauthProviders = () => {
|
|
|
- $scope.ui.isLoadingProviders = true
|
|
|
+ $scope.ui.isLoadingV1Ids = true
|
|
|
return _monitorRequest(UserOauthDataService.getUserOauthV1()).then(
|
|
|
- userProviders => {
|
|
|
- $scope.userProviders = userProviders
|
|
|
+ thirdPartyIds => {
|
|
|
+ $scope.thirdPartyIds = thirdPartyIds
|
|
|
}
|
|
|
)
|
|
|
}
|
|
|
+ const _unlinkError = (providerId, err) => {
|
|
|
+ $scope.providers[providerId].ui.hasError = true
|
|
|
+ $scope.providers[providerId].ui.errorMessage =
|
|
|
+ err && err.data && err.data.message ? err.data.message : 'error'
|
|
|
+ }
|
|
|
+
|
|
|
+ $scope.unlink = providerId => {
|
|
|
+ if (window.ExposedSettings.isOverleaf) {
|
|
|
+ // UI
|
|
|
+ $scope.providers[providerId].ui = {
|
|
|
+ hasError: false,
|
|
|
+ isProcessing: true
|
|
|
+ }
|
|
|
+ // Data for update
|
|
|
+ const data = {
|
|
|
+ link: false,
|
|
|
+ providerId
|
|
|
+ }
|
|
|
+ $http
|
|
|
+ .post('/user/oauth-unlink', data)
|
|
|
+ .catch(error => {
|
|
|
+ $scope.providers[providerId].ui.isProcessing = false
|
|
|
+ _unlinkError(providerId, error)
|
|
|
+ })
|
|
|
+ .then(response => {
|
|
|
+ $scope.providers[providerId].ui.isProcessing = false
|
|
|
+ if (response.status === 200) {
|
|
|
+ $scope.thirdPartyIds[providerId] = null
|
|
|
+ // v2thirdPartyIds below can be removed post user c11n
|
|
|
+ $scope.v2ThirdPartyIds[providerId] = null
|
|
|
+ } else {
|
|
|
+ _unlinkError(providerId, response)
|
|
|
+ }
|
|
|
+ })
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
_reset()
|
|
|
- return _getUserV1OauthProviders()
|
|
|
+ if (window.oauthFallback) {
|
|
|
+ _getUserV1OauthProviders()
|
|
|
+ }
|
|
|
}
|
|
|
]))
|