@@ -2,95 +2,97 @@ const Config = require('./Config');
22const Auth = require ( './Auth' ) ;
33const RESTController = require ( 'parse/lib/node/RESTController' ) ;
44const URL = require ( 'url' ) ;
5- import { logger } from './logger' ;
5+ const Parse = require ( 'parse/node' ) ;
66
7- export function ParseServerRESTController ( applicationId , router ) {
7+ function getSessionToken ( options ) {
8+ if ( options && typeof options . sessionToken === 'string' ) {
9+ return Parse . Promise . as ( options . sessionToken ) ;
10+ }
11+ return Parse . Promise . as ( null ) ;
12+ }
13+
14+ function getAuth ( options , config ) {
15+ if ( options . useMasterKey ) {
16+ return Parse . Promise . as ( new Auth . Auth ( { config, isMaster : true } ) ) ;
17+ }
18+ return getSessionToken ( options ) . then ( ( sessionToken ) => {
19+ if ( sessionToken ) {
20+ options . sessionToken = sessionToken ;
21+ return Auth . getAuthForSessionToken ( {
22+ config,
23+ sessionToken : sessionToken
24+ } ) ;
25+ } else {
26+ return Parse . Promise . as ( new Auth . Auth ( { config } ) ) ;
27+ }
28+ } )
29+ }
30+
31+ function ParseServerRESTController ( applicationId , router ) {
832 function handleRequest ( method , path , data = { } , options = { } ) {
9- let args = arguments ;
10- if ( path == 'batch' ) {
11- let promises = data . requests . map ( ( request ) => {
12- return handleRequest ( request . method , request . path , request . body , options ) . then ( ( response ) => {
13- return Parse . Promise . as ( { success : response } ) ;
14- } , ( error ) => {
15- return Parse . Promise . as ( { error : { code : error . code , error : error . message } } ) ;
16- } ) ;
17- } ) ;
18- return Parse . Promise . all ( promises ) ;
19- }
33+ // Store the arguments, for later use if internal fails
34+ let args = arguments ;
35+
36+ let config = new Config ( applicationId ) ;
37+ let serverURL = URL . parse ( config . serverURL ) ;
38+ if ( path . indexOf ( serverURL . path ) === 0 ) {
39+ path = path . slice ( serverURL . path . length , path . length ) ;
40+ }
2041
21- let config = new Config ( applicationId ) ;
22- let serverURL = URL . parse ( config . serverURL ) ;
23- if ( path . indexOf ( serverURL . path ) === 0 ) {
24- path = path . slice ( serverURL . path . length , path . length ) ;
25- }
42+ if ( path [ 0 ] !== "/" ) {
43+ path = "/" + path ;
44+ }
2645
27- if ( path [ 0 ] !== "/" ) {
28- path = "/" + path ;
29- }
46+ if ( path === '/batch' ) {
47+ let promises = data . requests . map ( ( request ) => {
48+ return handleRequest ( request . method , request . path , request . body , options ) . then ( ( response ) => {
49+ return Parse . Promise . as ( { success : response } ) ;
50+ } , ( error ) => {
51+ return Parse . Promise . as ( { error : { code : error . code , error : error . message } } ) ;
52+ } ) ;
53+ } ) ;
54+ return Parse . Promise . all ( promises ) ;
55+ }
3056
31- function getSessionToken ( options ) {
32- if ( options && typeof options . sessionToken === 'string' ) {
33- return Parse . Promise . as ( options . sessionToken ) ;
34- }
35- return Parse . Promise . as ( null ) ;
36- }
57+ let query ;
58+ if ( method === 'GET' ) {
59+ query = data ;
60+ }
3761
38- function getAuth ( options , config ) {
39- if ( options . useMasterKey ) {
40- return Parse . Promise . as ( new Auth . Auth ( { config, isMaster : true } ) ) ;
41- }
42- return getSessionToken ( options ) . then ( ( sessionToken ) => {
43- if ( sessionToken ) {
44- options . sessionToken = sessionToken ;
45- return Auth . getAuthForSessionToken ( {
46- config,
47- sessionToken : sessionToken
48- } ) ;
62+ return new Parse . Promise ( ( resolve , reject ) => {
63+ getAuth ( options , config ) . then ( ( auth ) => {
64+ let request = {
65+ body : data ,
66+ config,
67+ auth,
68+ info : {
69+ applicationId : applicationId ,
70+ sessionToken : options . sessionToken
71+ } ,
72+ query
73+ } ;
74+ return Promise . resolve ( ) . then ( ( ) => {
75+ return router . tryRouteRequest ( method , path , request ) ;
76+ } ) . then ( ( response ) => {
77+ resolve ( response . response , response . status , response ) ;
78+ } , ( err ) => {
79+ if ( err instanceof Parse . Error &&
80+ err . code == Parse . Error . INVALID_JSON &&
81+ err . message == `cannot route ${ method } ${ path } ` ) {
82+ RESTController . request . apply ( null , args ) . then ( resolve , reject ) ;
4983 } else {
50- return Parse . Promise . as ( new Auth . Auth ( { config } ) ) ;
84+ reject ( err ) ;
5185 }
52- } )
53- }
54-
55- let query ;
56- if ( method === 'GET' ) {
57- query = data ;
58- }
59-
60- return new Parse . Promise ( ( resolve , reject ) => {
61- getAuth ( options , config ) . then ( ( auth ) => {
62- let request = {
63- body : data ,
64- config,
65- auth,
66- info : {
67- applicationId : applicationId ,
68- sessionToken : options . sessionToken
69- } ,
70- query
71- } ;
72- return Promise . resolve ( ) . then ( ( ) => {
73- return router . tryRouteRequest ( method , path , request ) ;
74- } ) . then ( ( response ) => {
75- resolve ( response . response , response . status , response ) ;
76- } , ( err ) => {
77- if ( err instanceof Parse . Error &&
78- err . code == Parse . Error . INVALID_JSON &&
79- err . message == `cannot route ${ method } ${ path } ` ) {
80- RESTController . request . apply ( null , args ) . then ( resolve , reject ) ;
81- } else {
82- reject ( err ) ;
83- }
84- } ) ;
85- } , reject ) ;
86- } ) ;
87-
88- } ;
86+ } ) ;
87+ } , reject ) ;
88+ } ) ;
89+ } ;
8990
9091 return {
9192 request : handleRequest ,
92- ajax : function ( ) {
93- return RESTController . ajax . apply ( null , arguments ) ;
94- }
93+ ajax : RESTController . ajax
9594 } ;
96- } ;
95+ } ;
96+
97+ export default ParseServerRESTController ;
98+ export { ParseServerRESTController } ;
0 commit comments