]> git.immae.eu Git - perso/Immae/Projets/Cryptomonnaies/Cryptoportfolio/Front.git/blame - cmd/web/js/api.js
initial commit
[perso/Immae/Projets/Cryptomonnaies/Cryptoportfolio/Front.git] / cmd / web / js / api.js
CommitLineData
7a9e5112 1'use strict';
2
3var App = require('./app.js');
4
5var Api = {};
6
7Api.API_HOST = process.env.API_HOST;
8Api.API_PORT = process.env.API_PORT;
9
10if (process.env.API_HTTPS === 'true') {
11 Api.API_ROOT = 'https://';
12} else {
13 Api.API_ROOT = 'http://';
14}
15
16Api.API_ROOT += Api.API_HOST;
17if (Api.API_PORT !== '80') {
18 Api.API_ROOT += ':' + Api.API_PORT;
19}
20
21Api.API_ROOT += '/api';
22
23var 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
88Api.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
123Api.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
135Api.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
175module.exports.Api = Api;
176