This repository was archived by the owner on Dec 12, 2025. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 24
Expand file tree
/
Copy pathspring-security-csrf-token-interceptor-extended.min.js
More file actions
1 lines (1 loc) · 1.89 KB
/
spring-security-csrf-token-interceptor-extended.min.js
File metadata and controls
1 lines (1 loc) · 1.89 KB
1
!function(){"use strict";angular.module("spring-security-csrf-token-interceptor",[]).factory("csrfInterceptor",["$injector","$q",function($injector){var $q=$injector.get("$q"),csrf=$injector.get("csrf"),csrfService=csrf.init();return{request:function(config){return csrfService.settings.httpTypes.indexOf(config.method.toUpperCase())>-1&&(config.headers[csrfService.settings.csrfTokenHeader]=csrfService.token),config||$q.when(config)},responseError:function(response){var $http,newToken=response.headers(csrfService.settings.csrfTokenHeader);return 403===response.status&&csrfService.numRetries<csrfService.settings.maxRetries?(csrfService.getTokenData(),$http=$injector.get("$http"),csrfService.numRetries=csrfService.numRetries+1,$http(response.config)):(newToken&&(csrfService.token=newToken),$q.reject(response))},response:function(response){return csrfService.numRetries=0,response}}}]).factory("csrfService",[function(){var defaults={url:"/",csrfHttpType:"head",maxRetries:5,csrfTokenHeader:"X-CSRF-TOKEN",httpTypes:["GET","HEAD","PUT","POST","DELETE"]};return{inited:!1,settings:null,numRetries:0,token:"",init:function(options){this.settings=angular.extend({},defaults,options),this.getTokenData()},getTokenData:function(){var xhr=new XMLHttpRequest;xhr.open(this.settings.csrfHttpType,this.settings.url,!1),xhr.send(),this.token=xhr.getResponseHeader(this.settings.csrfTokenHeader),this.inited=!0}}}]).provider("csrf",[function(){var CsrfModel=function(options){return{options:options,csrfService:null}};return{$get:["csrfService",function(csrfService){var self=this;return{init:function(){return self.model=new CsrfModel(self.options),self.model.csrfService=csrfService,self.model.csrfService.init(self.model.options),self.model.csrfService}}}],model:null,options:{},config:function(options){this.options=options}}}]).config(["$httpProvider",function($httpProvider){$httpProvider.interceptors.push("csrfInterceptor")}])}();