@@ -22,6 +22,7 @@ const validateUserForDataReadAPI = validateRead;
22
22
const validateUserForDataWriteAPI = validateUserForWrite ;
23
23
const validateUserForGlobalAdmin = validateGlobalAdmin ;
24
24
const validateUserForMgmtReadAPI = validateUser ;
25
+ const request = require ( 'request' ) ;
25
26
26
27
var loaded_configs_time = 0 ;
27
28
@@ -2778,6 +2779,82 @@ const checksumSaltVerification = (params) => {
2778
2779
} ;
2779
2780
2780
2781
2782
+ //Function check if there is app redirect set
2783
+ //In that case redirect data and sets up params to know that request is getting redirected
2784
+ /**
2785
+ * @param {object } ob - params object
2786
+ * @returns {Boolean } - false if redirected
2787
+ */
2788
+ function validateRedirect ( ob ) {
2789
+ var params = ob . params ,
2790
+ app = ob . app ;
2791
+ if ( ! params . cancelRequest && app . redirect_url && app . redirect_url !== '' ) {
2792
+ var newPath = params . urlParts . path ;
2793
+
2794
+ //check if we have query part
2795
+ if ( newPath . indexOf ( '?' ) === - 1 ) {
2796
+ newPath += "?" ;
2797
+ }
2798
+
2799
+ var opts = {
2800
+ uri : app . redirect_url + newPath + '&ip_address=' + params . ip_address ,
2801
+ method : 'GET'
2802
+ } ;
2803
+
2804
+ //should we send post request
2805
+ if ( params . req . method . toLowerCase ( ) === 'post' ) {
2806
+ opts . method = "POST" ;
2807
+ //check if we have body from post method
2808
+ if ( params . req . body ) {
2809
+ opts . json = true ;
2810
+ opts . body = params . req . body ;
2811
+ }
2812
+ }
2813
+
2814
+ request ( opts , function ( error , response , body ) {
2815
+ var code = 400 ;
2816
+ var message = "Redirect error. Tried to redirect to:" + app . redirect_url ;
2817
+
2818
+ if ( response && response . statusCode ) {
2819
+ code = response . statusCode ;
2820
+ }
2821
+
2822
+
2823
+ if ( response && response . body ) {
2824
+ try {
2825
+ var resp = JSON . parse ( response . body ) ;
2826
+ message = resp . result || resp ;
2827
+ }
2828
+ catch ( e ) {
2829
+ if ( response . result ) {
2830
+ message = response . result ;
2831
+ }
2832
+ else {
2833
+ message = response . body ;
2834
+ }
2835
+ }
2836
+ }
2837
+ if ( error ) { //error
2838
+ log . e ( "Redirect error" , error , body , opts , app , params ) ;
2839
+ }
2840
+
2841
+ if ( plugins . getConfig ( "api" , params . app && params . app . plugins , true ) . safe ) {
2842
+ common . returnMessage ( params , code , message ) ;
2843
+ }
2844
+ } ) ;
2845
+ params . cancelRequest = "Redirected: " + app . redirect_url ;
2846
+ params . waitForResponse = false ;
2847
+ if ( plugins . getConfig ( "api" , params . app && params . app . plugins , true ) . safe ) {
2848
+ params . waitForResponse = true ;
2849
+ }
2850
+ return false ;
2851
+ }
2852
+ else {
2853
+ return true ;
2854
+ }
2855
+ }
2856
+
2857
+
2781
2858
/**
2782
2859
* Validate App for Write API
2783
2860
* Checks app_key from the http request against "apps" collection.
@@ -2870,37 +2947,53 @@ const validateAppForWriteAPI = (params, done, try_times) => {
2870
2947
console . log ( 'Parse metrics JSON failed' , params . qstring . metrics , params . req . url , params . req . body ) ;
2871
2948
}
2872
2949
}
2873
-
2874
2950
plugins . dispatch ( "/sdk/pre" , {
2875
2951
params : params ,
2876
2952
app : app
2877
2953
} , ( ) => {
2878
- plugins . dispatch ( "/sdk" , {
2879
- params : params ,
2880
- app : app
2881
- } , ( ) => {
2954
+ var processMe = validateRedirect ( { params : params , app : app } ) ;
2955
+ /*
2956
+ Keeping option open to add some request cancelation on /sdk for different cases than redirect.
2957
+ (That is why duplicate code)
2958
+ */
2959
+ if ( ! processMe ) {
2882
2960
plugins . dispatch ( "/sdk/log" , { params : params } ) ;
2883
- if ( ! params . cancelRequest ) {
2884
- processUser ( params , validateAppForWriteAPI , done , try_times ) . then ( ( userErr ) => {
2885
- if ( userErr ) {
2886
- if ( ! params . res . finished ) {
2887
- common . returnMessage ( params , 400 , userErr ) ;
2961
+ //params.cancelRequest is true
2962
+ if ( ! params . res . finished && ! params . waitForResponse ) {
2963
+ common . returnOutput ( params , { result : 'Success' , info : 'Request ignored: ' + params . cancelRequest } ) ;
2964
+ //common.returnMessage(params, 200, 'Request ignored: ' + params.cancelRequest);
2965
+ }
2966
+ common . log ( "request" ) . i ( 'Request ignored: ' + params . cancelRequest , params . req . url , params . req . body ) ;
2967
+ return done ? done ( ) : false ;
2968
+ }
2969
+ else {
2970
+ plugins . dispatch ( "/sdk" , {
2971
+ params : params ,
2972
+ app : app
2973
+ } , ( ) => {
2974
+ plugins . dispatch ( "/sdk/log" , { params : params } ) ;
2975
+ if ( ! params . cancelRequest ) {
2976
+ processUser ( params , validateAppForWriteAPI , done , try_times ) . then ( ( userErr ) => {
2977
+ if ( userErr ) {
2978
+ if ( ! params . res . finished ) {
2979
+ common . returnMessage ( params , 400 , userErr ) ;
2980
+ }
2888
2981
}
2982
+ else {
2983
+ processRequestData ( params , app , done ) ;
2984
+ }
2985
+ } ) ;
2986
+ }
2987
+ else {
2988
+ if ( ! params . res . finished && ! params . waitForResponse ) {
2989
+ common . returnOutput ( params , { result : 'Success' , info : 'Request ignored: ' + params . cancelRequest } ) ;
2990
+ //common.returnMessage(params, 200, 'Request ignored: ' + params.cancelRequest);
2889
2991
}
2890
- else {
2891
- processRequestData ( params , app , done ) ;
2892
- }
2893
- } ) ;
2894
- }
2895
- else {
2896
- if ( ! params . res . finished && ! params . waitForResponse ) {
2897
- common . returnOutput ( params , { result : 'Success' , info : 'Request ignored: ' + params . cancelRequest } ) ;
2898
- //common.returnMessage(params, 200, 'Request ignored: ' + params.cancelRequest);
2992
+ common . log ( "request" ) . i ( 'Request ignored: ' + params . cancelRequest , params . req . url , params . req . body ) ;
2993
+ return done ? done ( ) : false ;
2899
2994
}
2900
- common . log ( "request" ) . i ( 'Request ignored: ' + params . cancelRequest , params . req . url , params . req . body ) ;
2901
- return done ? done ( ) : false ;
2902
- }
2903
- } ) ;
2995
+ } ) ;
2996
+ }
2904
2997
} ) ;
2905
2998
} ) ;
2906
2999
} ) ;
0 commit comments