diff options
author | jloup <jean-loup.jamet@trainline.com> | 2018-02-14 14:19:09 +0100 |
---|---|---|
committer | jloup <jean-loup.jamet@trainline.com> | 2018-02-14 14:19:09 +0100 |
commit | 7a9e5112eaaea58d55f181d3e5296e4ff839921c (patch) | |
tree | 968ed193f42a1fad759cc89ad2f8ad5b0091291e /cmd/web/js/api.js | |
download | Front-7a9e5112eaaea58d55f181d3e5296e4ff839921c.tar.gz Front-7a9e5112eaaea58d55f181d3e5296e4ff839921c.tar.zst Front-7a9e5112eaaea58d55f181d3e5296e4ff839921c.zip |
initial commit
Diffstat (limited to 'cmd/web/js/api.js')
-rw-r--r-- | cmd/web/js/api.js | 176 |
1 files changed, 176 insertions, 0 deletions
diff --git a/cmd/web/js/api.js b/cmd/web/js/api.js new file mode 100644 index 0000000..e2acd1d --- /dev/null +++ b/cmd/web/js/api.js | |||
@@ -0,0 +1,176 @@ | |||
1 | 'use strict'; | ||
2 | |||
3 | var App = require('./app.js'); | ||
4 | |||
5 | var Api = {}; | ||
6 | |||
7 | Api.API_HOST = process.env.API_HOST; | ||
8 | Api.API_PORT = process.env.API_PORT; | ||
9 | |||
10 | if (process.env.API_HTTPS === 'true') { | ||
11 | Api.API_ROOT = 'https://'; | ||
12 | } else { | ||
13 | Api.API_ROOT = 'http://'; | ||
14 | } | ||
15 | |||
16 | Api.API_ROOT += Api.API_HOST; | ||
17 | if (Api.API_PORT !== '80') { | ||
18 | Api.API_ROOT += ':' + Api.API_PORT; | ||
19 | } | ||
20 | |||
21 | Api.API_ROOT += '/api'; | ||
22 | |||
23 | var ApiEndpoints = { | ||
24 | 'SIGNUP': { | ||
25 | 'type': 'POST', | ||
26 | 'auth': false, | ||
27 | 'parameters': [ | ||
28 | {'name': 'email', 'mandatory': true, 'inquery': true}, | ||
29 | {'name': 'password', 'mandatory': true, 'inquery': true} | ||
30 | ], | ||
31 | 'buildUrl': function(params) { | ||
32 | return '/signup'; | ||
33 | } | ||
34 | }, | ||
35 | 'SIGNIN': { | ||
36 | 'type': 'POST', | ||
37 | 'auth': false, | ||
38 | 'parameters': [ | ||
39 | {'name': 'email', 'mandatory': true, 'inquery': true}, | ||
40 | {'name': 'password', 'mandatory': true, 'inquery': true} | ||
41 | ], | ||
42 | 'buildUrl': function(params) { | ||
43 | return '/signin'; | ||
44 | } | ||
45 | }, | ||
46 | 'MARKET': { | ||
47 | 'type': 'GET', | ||
48 | 'auth': true, | ||
49 | 'parameters': [ | ||
50 | {'name': 'name', 'mandatory': true, 'inquery': false}, | ||
51 | ], | ||
52 | 'buildUrl': function(params) { | ||
53 | return '/market/' + params.name; | ||
54 | } | ||
55 | }, | ||
56 | 'UPDATE_MARKET': { | ||
57 | 'type': 'POST', | ||
58 | 'auth': true, | ||
59 | 'parameters': [ | ||
60 | {'name': 'name', 'mandatory': true, 'inquery': false}, | ||
61 | {'name': 'key', 'mandatory': true, 'inquery': true}, | ||
62 | {'name': 'secret', 'mandatory': true, 'inquery': true}, | ||
63 | ], | ||
64 | 'buildUrl': function(params) { | ||
65 | return '/market/' + params.name + '/update'; | ||
66 | } | ||
67 | }, | ||
68 | 'OTP_ENROLL': { | ||
69 | 'type': 'GET', | ||
70 | 'auth': true, | ||
71 | 'parameters': [], | ||
72 | 'buildUrl': function(params) { | ||
73 | return '/otp/enroll'; | ||
74 | } | ||
75 | }, | ||
76 | 'OTP_VALIDATE': { | ||
77 | 'type': 'POST', | ||
78 | 'auth': true, | ||
79 | 'parameters': [ | ||
80 | {'name': 'pass', 'mandatory': true, 'inquery': true}, | ||
81 | ], | ||
82 | 'buildUrl': function(params) { | ||
83 | return '/otp/validate'; | ||
84 | } | ||
85 | }, | ||
86 | }; | ||
87 | |||
88 | Api.BuildRequest = function(endpointId, params) { | ||
89 | var endpoint = ApiEndpoints[endpointId]; | ||
90 | var query = {}; | ||
91 | var url = ''; | ||
92 | var headers = {}; | ||
93 | var jwt = App.getUserToken(); | ||
94 | |||
95 | if (endpoint === undefined) { | ||
96 | return {'err': 'cannot find endpoint ' + endpointId}; | ||
97 | } | ||
98 | |||
99 | if (endpoint.auth === true && (jwt === undefined || jwt === null)) { | ||
100 | return {'err': 'this endpoint needs auth'}; | ||
101 | } | ||
102 | |||
103 | if (jwt !== undefined && jwt !== null) { | ||
104 | headers.Authorization = 'Bearer ' + jwt; | ||
105 | } | ||
106 | |||
107 | for (var i = 0; i < endpoint.parameters.length; i++) { | ||
108 | var parameter = endpoint.parameters[i]; | ||
109 | if (parameter.mandatory === true && params[parameter.name] === undefined) { | ||
110 | return {'err': 'parameter \'' + parameter.name + '\' is mandatory'}; | ||
111 | } | ||
112 | |||
113 | if (parameter.inquery === true) { | ||
114 | query[parameter.name] = params[parameter.name]; | ||
115 | } | ||
116 | } | ||
117 | |||
118 | url = endpoint.buildUrl(params); | ||
119 | |||
120 | return {'err': null, 'url': Api.API_ROOT + url, 'headers': headers, 'params': query, 'type': endpoint.type}; | ||
121 | }; | ||
122 | |||
123 | Api.Call = function(endpointId, params, fn) { | ||
124 | var request = Api.BuildRequest(endpointId, params); | ||
125 | |||
126 | if (request.err !== null) { | ||
127 | console.error('Api BuildRequest error', request.err); | ||
128 | fn({'err': request.err}, -1, {}); | ||
129 | return null; | ||
130 | } | ||
131 | |||
132 | return Api.DoRequest(request.type, request.url, request.params, request.headers, fn); | ||
133 | }; | ||
134 | |||
135 | Api.DoRequest = function(type, url, params, headers, callback) { | ||
136 | return $.ajax({ | ||
137 | data: params, | ||
138 | headers: headers, | ||
139 | timeout: 30000, | ||
140 | dataType: 'json', | ||
141 | error: function(xhr, status, err) { | ||
142 | if (status === 'abort') { | ||
143 | return; | ||
144 | } | ||
145 | |||
146 | var apiStatus = null; | ||
147 | var apiResponse = null; | ||
148 | var apiCode = null; | ||
149 | if (xhr.responseJSON) { | ||
150 | apiStatus = xhr.responseJSON.status; | ||
151 | apiResponse = xhr.responseJSON.response; | ||
152 | apiCode = xhr.responseJSON.code; | ||
153 | } | ||
154 | |||
155 | if (xhr.status === 401 || xhr.status === 403) { | ||
156 | if (App.onUserNotAuthorized(xhr.status, apiCode) === false) { | ||
157 | return; | ||
158 | } | ||
159 | } | ||
160 | |||
161 | callback({'url': url, 'err': err, 'status': status, 'code': apiCode, 'xhr': xhr}, apiStatus, apiResponse); | ||
162 | }, | ||
163 | success: function(data) { | ||
164 | var err = null; | ||
165 | if (data.status !== 'ok') { | ||
166 | err = {'url': url, 'status': status}; | ||
167 | } | ||
168 | callback(err, data.status, data.response); | ||
169 | }, | ||
170 | type: type, | ||
171 | url: url | ||
172 | }); | ||
173 | }; | ||
174 | |||
175 | module.exports.Api = Api; | ||
176 | |||