|
@@ -9,6 +9,26 @@ app.config ['$provide', ($provide) ->
|
|
|
]
|
|
]
|
|
|
]
|
|
]
|
|
|
|
|
|
|
|
-# TODO: add support for an errorHttpInterceptor to catch failing ajax
|
|
|
|
|
-# requests as described at
|
|
|
|
|
|
|
+# Interceptor to check auth failures in all $http requests
|
|
|
# http://bahmutov.calepin.co/catch-all-errors-in-angular-app.html
|
|
# http://bahmutov.calepin.co/catch-all-errors-in-angular-app.html
|
|
|
|
|
+
|
|
|
|
|
+app.factory 'unAuthHttpResponseInterceptor', ['$q','$location', ($q, $location) ->
|
|
|
|
|
+ responseError: (response) ->
|
|
|
|
|
+ # redirect any unauthorised or forbidden responses back to /login
|
|
|
|
|
+ #
|
|
|
|
|
+ # set disableAutoLoginRedirect:true in the http request config
|
|
|
|
|
+ # to disable this behaviour
|
|
|
|
|
+ if response.status in [401, 403] and not response.config?.disableAutoLoginRedirect
|
|
|
|
|
+ # for /project urls set the ?redir parameter to come back here
|
|
|
|
|
+ # otherwise just go to the login page
|
|
|
|
|
+ if window.location.pathname.match(/^\/project/)
|
|
|
|
|
+ window.location = "/login?redir=#{encodeURI(window.location.pathname)}"
|
|
|
|
|
+ else
|
|
|
|
|
+ window.location = "/login"
|
|
|
|
|
+ # pass the response back to the original requester
|
|
|
|
|
+ return $q.reject(response)
|
|
|
|
|
+]
|
|
|
|
|
+
|
|
|
|
|
+app.config ['$httpProvider', ($httpProvider) ->
|
|
|
|
|
+ $httpProvider.interceptors.push 'unAuthHttpResponseInterceptor'
|
|
|
|
|
+]
|