Commit 7cb66aa3cfc02d1bb547697452312cd46b3c2cdc

Authored by Adhidarma Hadiwinoto
1 parent b88ba20016
Exists in master

Async await on add del senders

Showing 1 changed file with 25 additions and 22 deletions Inline Diff

lib/apiserver/router-config-senders.js
1 'use strict'; 1 'use strict';
2 2
3 const fs = require('fs'); 3 const fs = require('fs');
4 const express = require('express'); 4 const express = require('express');
5 5
6 const config = require('komodo-sdk/config'); 6 const config = require('komodo-sdk/config');
7 const logger = require('komodo-sdk/logger'); 7 const logger = require('komodo-sdk/logger');
8 8
9 const locks = require('locks'); 9 const locks = require('locks');
10 const mutexSave = locks.createMutex(); 10 const mutexSave = locks.createMutex();
11 11
12 const router = express.Router(); 12 const router = express.Router();
13 module.exports = router; 13 module.exports = router;
14 14
15 function saveConfig() { 15 function saveConfig() {
16 mutexSave.lock(() => { 16 return new Promise((resolve) => {
17 fs.writeFile(global.KOMODO_SDK_CONFIG_FILENAME, JSON.stringify(config, null, 4), (err) => { 17 mutexSave.lock(() => {
18 if (err) { 18 fs.writeFile(global.KOMODO_SDK_CONFIG_FILENAME, JSON.stringify(config, null, 4), (err) => {
19 logger.warn(`APISERVER: ERROR writing config file. ${err.toString()}`); 19 if (err) {
20 } 20 logger.warn(`APISERVER: ERROR writing config file. ${err.toString()}`);
21 mutexSave.unlock(); 21 }
22 mutexSave.unlock();
23 resolve();
24 });
22 }); 25 });
23 }); 26 });
24 } 27 }
25 28
26 function initConfig(req, res, next) { 29 function initConfig(req, res, next) {
27 if (typeof config.senders_imsi !== 'object') { 30 if (typeof config.senders_imsi !== 'object') {
28 config.senders_imsi = { 31 config.senders_imsi = {
29 prefix_names: {}, 32 prefix_names: {},
30 unknown_prefix: [], 33 unknown_prefix: [],
31 default: [], 34 default: [],
32 }; 35 };
33 } 36 }
34 37
35 if (typeof config.senders_imsi.prefix_names !== 'object') { 38 if (typeof config.senders_imsi.prefix_names !== 'object') {
36 config.senders_imsi.prefix_names = {}; 39 config.senders_imsi.prefix_names = {};
37 } 40 }
38 41
39 if (!Array.isArray(config.senders_imsi.unknown_prefix)) { 42 if (!Array.isArray(config.senders_imsi.unknown_prefix)) {
40 config.senders_imsi.unknown_prefix = []; 43 config.senders_imsi.unknown_prefix = [];
41 } 44 }
42 45
43 if (!Array.isArray(config.senders_imsi.default)) { 46 if (!Array.isArray(config.senders_imsi.default)) {
44 config.senders_imsi.default = []; 47 config.senders_imsi.default = [];
45 } 48 }
46 49
47 next(); 50 next();
48 } 51 }
49 52
50 function pageIndex(req, res) { 53 function pageIndex(req, res) {
51 res.json(config.senders_imsi); 54 res.json(config.senders_imsi);
52 } 55 }
53 56
54 function delImsi(data, imsi, cleanup) { 57 async function delImsi(data, imsi, cleanup) {
55 const idx = data.indexOf(imsi); 58 const idx = data.indexOf(imsi);
56 if (idx < 0) return; 59 if (idx < 0) return;
57 60
58 data.splice(idx, 1); 61 data.splice(idx, 1);
59 62
60 if (cleanup) { 63 if (cleanup) {
61 Object.keys(config.senders_imsi.prefix_names).forEach((key) => { 64 Object.keys(config.senders_imsi.prefix_names).forEach((key) => {
62 if (!config.senders_imsi.prefix_names[key]) return; 65 if (!config.senders_imsi.prefix_names[key]) return;
63 66
64 if (!Array.isArray(config.senders_imsi.prefix_names[key])) return; 67 if (!Array.isArray(config.senders_imsi.prefix_names[key])) return;
65 68
66 if (config.senders_imsi.prefix_names[key].length === 0) { 69 if (config.senders_imsi.prefix_names[key].length === 0) {
67 delete config.senders_imsi.prefix_names[key]; 70 delete config.senders_imsi.prefix_names[key];
68 } 71 }
69 }); 72 });
70 } 73 }
71 74
72 saveConfig(); 75 await saveConfig();
73 } 76 }
74 77
75 function addImsi(data, imsi) { 78 async function addImsi(data, imsi) {
76 if (data.indexOf(imsi) >= 0) { 79 if (data.indexOf(imsi) >= 0) {
77 return false; 80 return false;
78 } 81 }
79 82
80 data.push(imsi); 83 data.push(imsi);
81 saveConfig(); 84 await saveConfig();
82 85
83 return true; 86 return true;
84 } 87 }
85 88
86 function addImsiResponse(req, res) { 89 function addImsiResponse(req, res) {
87 if (res.locals.add_imsi_success) { 90 if (res.locals.add_imsi_success) {
88 res.json({ 91 res.json({
89 status: 'OK', 92 status: 'OK',
90 message: 'IMSI berhasil didaftarkan', 93 message: 'IMSI berhasil didaftarkan',
91 }); 94 });
92 } else { 95 } else {
93 res.json({ 96 res.json({
94 status: 'NOT OK', 97 status: 'NOT OK',
95 message: 'IMSI sudah terdaftar', 98 message: 'IMSI sudah terdaftar',
96 }); 99 });
97 } 100 }
98 } 101 }
99 102
100 /** 103 /**
101 * Menambahkan IMSI pada list sender by prefix 104 * Menambahkan IMSI pada list sender by prefix
102 * 105 *
103 * @param {object} req - Express request object 106 * @param {object} req - Express request object
104 * @param {object} req.query - query string object 107 * @param {object} req.query - query string object
105 * @param {string} req.query.prefix - nama prefix 108 * @param {string} req.query.prefix - nama prefix
106 * @param {string} req.query.imsi - nomor imsi 109 * @param {string} req.query.imsi - nomor imsi
107 * @param {object} res - Express result object 110 * @param {object} res - Express result object
108 */ 111 */
109 function pageAddForPrefix(req, res, next) { 112 async function pageAddForPrefix(req, res, next) {
110 if (!req.query.prefix) { 113 if (!req.query.prefix) {
111 res.json({ 114 res.json({
112 status: 'NOT-OK', 115 status: 'NOT-OK',
113 message: 'Undefined prefix', 116 message: 'Undefined prefix',
114 }); 117 });
115 118
116 return; 119 return;
117 } 120 }
118 121
119 if (!req.query.imsi) { 122 if (!req.query.imsi) {
120 res.json({ 123 res.json({
121 status: 'NOT-OK', 124 status: 'NOT-OK',
122 message: 'Undefined IMSI', 125 message: 'Undefined IMSI',
123 }); 126 });
124 127
125 return; 128 return;
126 } 129 }
127 130
128 req.query.prefix = req.query.prefix.toUpperCase(); 131 req.query.prefix = req.query.prefix.toUpperCase();
129 132
130 if (!config.senders_imsi.prefix_names[req.query.prefix]) { 133 if (!config.senders_imsi.prefix_names[req.query.prefix]) {
131 config.senders_imsi.prefix_names[req.query.prefix] = []; 134 config.senders_imsi.prefix_names[req.query.prefix] = [];
132 } 135 }
133 136
134 res.locals.add_imsi_success = addImsi(config.senders_imsi.prefix_names[req.query.prefix], req.query.imsi); 137 res.locals.add_imsi_success = await addImsi(config.senders_imsi.prefix_names[req.query.prefix], req.query.imsi);
135 next(); 138 next();
136 } 139 }
137 140
138 function pageDelForPrefix(req, res) { 141 async function pageDelForPrefix(req, res) {
139 if (!req.query.prefix) { 142 if (!req.query.prefix) {
140 res.json({ 143 res.json({
141 status: 'NOT-OK', 144 status: 'NOT-OK',
142 message: 'Undefined prefix', 145 message: 'Undefined prefix',
143 }); 146 });
144 147
145 return; 148 return;
146 } 149 }
147 150
148 if (!req.query.imsi) { 151 if (!req.query.imsi) {
149 res.json({ 152 res.json({
150 status: 'NOT-OK', 153 status: 'NOT-OK',
151 message: 'Undefined IMSI', 154 message: 'Undefined IMSI',
152 }); 155 });
153 156
154 return; 157 return;
155 } 158 }
156 159
157 delImsi(config.senders_imsi.prefix_names[req.query.prefix], req.query.imsi, true); 160 await delImsi(config.senders_imsi.prefix_names[req.query.prefix], req.query.imsi, true);
158 161
159 res.json({ 162 res.json({
160 status: 'OK', 163 status: 'OK',
161 message: 'IMSI berhasil dihapus', 164 message: 'IMSI berhasil dihapus',
162 }); 165 });
163 } 166 }
164 167
165 /** 168 /**
166 * Menambahkan IMSI pada list sender untuk prefix tidak dikenal 169 * Menambahkan IMSI pada list sender untuk prefix tidak dikenal
167 * 170 *
168 * @param {object} req - Express request object 171 * @param {object} req - Express request object
169 * @param {object} req.query - query string object 172 * @param {object} req.query - query string object
170 * @param {string} req.query.imsi - nomor imsi 173 * @param {string} req.query.imsi - nomor imsi
171 * @param {object} res - Express result object 174 * @param {object} res - Express result object
172 */ 175 */
173 function pageAddForUnknownPrefix(req, res, next) { 176 async function pageAddForUnknownPrefix(req, res, next) {
174 if (!req.query.imsi) { 177 if (!req.query.imsi) {
175 res.json({ 178 res.json({
176 status: 'NOT-OK', 179 status: 'NOT-OK',
177 message: 'Undefined IMSI', 180 message: 'Undefined IMSI',
178 }); 181 });
179 182
180 return; 183 return;
181 } 184 }
182 185
183 res.locals.add_imsi_success = addImsi(config.senders_imsi.unknown_prefix, req.query.imsi); 186 res.locals.add_imsi_success = await addImsi(config.senders_imsi.unknown_prefix, req.query.imsi);
184 next(); 187 next();
185 } 188 }
186 189
187 function pageDelForUnknownPrefix(req, res) { 190 async function pageDelForUnknownPrefix(req, res) {
188 if (!req.query.imsi) { 191 if (!req.query.imsi) {
189 res.json({ 192 res.json({
190 status: 'NOT-OK', 193 status: 'NOT-OK',
191 message: 'Undefined IMSI', 194 message: 'Undefined IMSI',
192 }); 195 });
193 196
194 return; 197 return;
195 } 198 }
196 199
197 delImsi(config.senders_imsi.unknown_prefix, req.query.imsi); 200 await delImsi(config.senders_imsi.unknown_prefix, req.query.imsi);
198 res.json({ 201 res.json({
199 status: 'OK', 202 status: 'OK',
200 message: 'IMSI berhasil dihapus', 203 message: 'IMSI berhasil dihapus',
201 }); 204 });
202 } 205 }
203 206
204 /** 207 /**
205 * Menambahkan IMSI pada list sender default 208 * Menambahkan IMSI pada list sender default
206 * 209 *
207 * @param {object} req - Express request object 210 * @param {object} req - Express request object
208 * @param {object} req.query - query string object 211 * @param {object} req.query - query string object
209 * @param {string} req.query.imsi - nomor imsi 212 * @param {string} req.query.imsi - nomor imsi
210 * @param {object} res - Express result object 213 * @param {object} res - Express result object
211 */ 214 */
212 function pageAddForDefault(req, res, next) { 215 async function pageAddForDefault(req, res, next) {
213 if (!req.query.imsi) { 216 if (!req.query.imsi) {
214 res.json({ 217 res.json({
215 status: 'NOT-OK', 218 status: 'NOT-OK',
216 message: 'Undefined IMSI', 219 message: 'Undefined IMSI',
217 }); 220 });
218 221
219 return; 222 return;
220 } 223 }
221 224
222 res.locals.add_imsi_success = addImsi(config.senders_imsi.default, req.query.imsi); 225 res.locals.add_imsi_success = await addImsi(config.senders_imsi.default, req.query.imsi);
223 next(); 226 next();
224 } 227 }
225 228
226 function pageDelForDefault(req, res) { 229 async function pageDelForDefault(req, res) {
227 if (!req.query.imsi) { 230 if (!req.query.imsi) {
228 res.json({ 231 res.json({
229 status: 'NOT-OK', 232 status: 'NOT-OK',
230 message: 'Undefined IMSI', 233 message: 'Undefined IMSI',
231 }); 234 });
232 235
233 return; 236 return;
234 } 237 }
235 238
236 delImsi(config.senders_imsi.default, req.query.imsi); 239 await delImsi(config.senders_imsi.default, req.query.imsi);
237 res.json({ 240 res.json({
238 status: 'OK', 241 status: 'OK',
239 message: 'IMSI berhasil dihapus', 242 message: 'IMSI berhasil dihapus',
240 }); 243 });
241 } 244 }
242 245
243 router.use(initConfig); 246 router.use(initConfig);
244 router.get('/', initConfig, pageIndex); 247 router.get('/', initConfig, pageIndex);
245 248
246 router.get('/add-for-prefix', pageAddForPrefix, addImsiResponse); 249 router.get('/add-for-prefix', pageAddForPrefix, addImsiResponse);
247 router.get('/add-for-unknown-prefix', pageAddForUnknownPrefix, addImsiResponse); 250 router.get('/add-for-unknown-prefix', pageAddForUnknownPrefix, addImsiResponse);
248 router.get('/add-for-default', pageAddForDefault, addImsiResponse) 251 router.get('/add-for-default', pageAddForDefault, addImsiResponse)
249 252
250 router.get('/del-for-prefix', pageDelForPrefix); 253 router.get('/del-for-prefix', pageDelForPrefix);
251 router.get('/del-for-unknown-prefix', pageDelForUnknownPrefix); 254 router.get('/del-for-unknown-prefix', pageDelForUnknownPrefix);
252 router.get('/del-for-default', pageDelForDefault); 255 router.get('/del-for-default', pageDelForDefault);
253 256