Commit 9d1a83083450d9a84cb5b790706aca9b74c135c5
1 parent
068c7c1383
Exists in
master
Add trim on input
Showing 1 changed file with 2 additions and 2 deletions Inline Diff
lib/webadmin/router/config.js
1 | const fs = require('fs'); | 1 | const fs = require('fs'); |
2 | const express = require('express'); | 2 | const express = require('express'); |
3 | const { orderBy } = require('natural-orderby'); | 3 | const { orderBy } = require('natural-orderby'); |
4 | const config = require('komodo-sdk/config'); | 4 | const config = require('komodo-sdk/config'); |
5 | 5 | ||
6 | const router = express.Router(); | 6 | const router = express.Router(); |
7 | module.exports = router; | 7 | module.exports = router; |
8 | 8 | ||
9 | async function writeConfigFile() { | 9 | async function writeConfigFile() { |
10 | try { | 10 | try { |
11 | await fs.promises.writeFile('config.json', JSON.stringify(config, null, 4)); | 11 | await fs.promises.writeFile('config.json', JSON.stringify(config, null, 4)); |
12 | } catch (e) { | 12 | } catch (e) { |
13 | // | 13 | // |
14 | } | 14 | } |
15 | } | 15 | } |
16 | 16 | ||
17 | function pageMain(req, res) { | 17 | function pageMain(req, res) { |
18 | res.render('config.index.html', { | 18 | res.render('config.index.html', { |
19 | modems: orderBy(config.modems, [(v) => v.name], ['asc']), | 19 | modems: orderBy(config.modems, [(v) => v.name], ['asc']), |
20 | baseUrl: req.baseUrl, | 20 | baseUrl: req.baseUrl, |
21 | }); | 21 | }); |
22 | } | 22 | } |
23 | 23 | ||
24 | async function pageSetOutgoing(req, res) { | 24 | async function pageSetOutgoing(req, res) { |
25 | const modemName = (req.params.modemName || '').trim(); | 25 | const modemName = (req.params.modemName || '').trim(); |
26 | if (!modemName) { | 26 | if (!modemName) { |
27 | res.end('Invalid modem name'); | 27 | res.end('Invalid modem name'); |
28 | return; | 28 | return; |
29 | } | 29 | } |
30 | 30 | ||
31 | const idx = (config.modems || []).findIndex((modem) => modem.name === modemName); | 31 | const idx = (config.modems || []).findIndex((modem) => modem.name === modemName); |
32 | if (idx < 0) { | 32 | if (idx < 0) { |
33 | res.end('No modem matched'); | 33 | res.end('No modem matched'); |
34 | return; | 34 | return; |
35 | } | 35 | } |
36 | 36 | ||
37 | config.modems[idx].outgoing = req.params.newValue === '1' || req.params.newValue === 'true'; | 37 | config.modems[idx].outgoing = req.params.newValue === '1' || req.params.newValue === 'true'; |
38 | 38 | ||
39 | await writeConfigFile(); | 39 | await writeConfigFile(); |
40 | 40 | ||
41 | res.redirect(`${req.baseUrl}/modem#modem${encodeURIComponent(modemName)}`); | 41 | res.redirect(`${req.baseUrl}/modem#modem${encodeURIComponent(modemName)}`); |
42 | } | 42 | } |
43 | 43 | ||
44 | async function pageDelPrefix(req, res) { | 44 | async function pageDelPrefix(req, res) { |
45 | const modemName = (req.params.modemName || '').trim(); | 45 | const modemName = (req.params.modemName || '').trim(); |
46 | if (!modemName) { | 46 | if (!modemName) { |
47 | res.end('Invalid modem name'); | 47 | res.end('Invalid modem name'); |
48 | return; | 48 | return; |
49 | } | 49 | } |
50 | 50 | ||
51 | const prefix = (req.params.prefix || '').trim(); | 51 | const prefix = (req.params.prefix || '').trim(); |
52 | if (!prefix) { | 52 | if (!prefix) { |
53 | res.end('Invalid prefix'); | 53 | res.end('Invalid prefix'); |
54 | return; | 54 | return; |
55 | } | 55 | } |
56 | 56 | ||
57 | const modemIdx = (config.modems || []).findIndex((modem) => modem.name === modemName); | 57 | const modemIdx = (config.modems || []).findIndex((modem) => modem.name === modemName); |
58 | if (modemIdx < 0) { | 58 | if (modemIdx < 0) { |
59 | res.end('No modem matched'); | 59 | res.end('No modem matched'); |
60 | return; | 60 | return; |
61 | } | 61 | } |
62 | 62 | ||
63 | const prefixIdx = (config.modems[modemIdx].prefix || []).indexOf(prefix); | 63 | const prefixIdx = (config.modems[modemIdx].prefix || []).indexOf(prefix); |
64 | if (prefixIdx < 0) { | 64 | if (prefixIdx < 0) { |
65 | res.end('No prefix matched'); | 65 | res.end('No prefix matched'); |
66 | return; | 66 | return; |
67 | } | 67 | } |
68 | 68 | ||
69 | config.modems[modemIdx].prefix.splice(prefixIdx, 1); | 69 | config.modems[modemIdx].prefix.splice(prefixIdx, 1); |
70 | 70 | ||
71 | await writeConfigFile(); | 71 | await writeConfigFile(); |
72 | 72 | ||
73 | res.redirect(`${req.baseUrl}/modem#modem${encodeURIComponent(modemName)}`); | 73 | res.redirect(`${req.baseUrl}/modem#modem${encodeURIComponent(modemName)}`); |
74 | } | 74 | } |
75 | 75 | ||
76 | async function modemAdd(req, res) { | 76 | async function modemAdd(req, res) { |
77 | const modem = { | 77 | const modem = { |
78 | name: (req.body.name || '').trim(), | 78 | name: (req.body.name || '').trim(), |
79 | imsi: (req.body.imsi || '').trim(), | 79 | imsi: (req.body.imsi || '').trim(), |
80 | outgoing: !!req.body.outgoing, | 80 | outgoing: !!req.body.outgoing, |
81 | prefix: (req.body.prefix || '').split(/[, ]+/) | 81 | prefix: (req.body.prefix || '').trim().split(/[, ]+/) |
82 | .map((val) => val.trim().replace(/^0/, '62')) | 82 | .map((val) => val.trim().replace(/^0/, '62')) |
83 | .filter((row) => row), | 83 | .filter((row) => row), |
84 | }; | 84 | }; |
85 | 85 | ||
86 | const index = config.modems.find( | 86 | const index = config.modems.find( |
87 | (item) => item.name.toUpperCase() === modem.name.toUpperCase(), | 87 | (item) => item.name.toUpperCase() === modem.name.toUpperCase(), |
88 | ); | 88 | ); |
89 | 89 | ||
90 | if (index >= 0) { | 90 | if (index >= 0) { |
91 | res.end('Modem duplikat'); | 91 | res.end('Modem duplikat'); |
92 | return; | 92 | return; |
93 | } | 93 | } |
94 | 94 | ||
95 | config.modems.push(modem); | 95 | config.modems.push(modem); |
96 | await writeConfigFile(); | 96 | await writeConfigFile(); |
97 | 97 | ||
98 | res.redirect(`${req.baseUrl}/modem`); | 98 | res.redirect(`${req.baseUrl}/modem`); |
99 | } | 99 | } |
100 | 100 | ||
101 | async function modemAddPrefix(req, res) { | 101 | async function modemAddPrefix(req, res) { |
102 | const modemName = (req.body.name || '').trim(); | 102 | const modemName = (req.body.name || '').trim(); |
103 | const prefix = (req.body.prefix || '').split(/[, ]+/) | 103 | const prefix = (req.body.prefix || '').trim().split(/[, ]+/) |
104 | .map((val) => val.trim().replace(/^0/, '62')) | 104 | .map((val) => val.trim().replace(/^0/, '62')) |
105 | .filter((row) => row); | 105 | .filter((row) => row); |
106 | 106 | ||
107 | const index = config.modems.findIndex( | 107 | const index = config.modems.findIndex( |
108 | (item) => item.name.toUpperCase() === modemName.toUpperCase(), | 108 | (item) => item.name.toUpperCase() === modemName.toUpperCase(), |
109 | ); | 109 | ); |
110 | if (Array.isArray(config.modems[index].prefix)) { | 110 | if (Array.isArray(config.modems[index].prefix)) { |
111 | config.modems[index].prefix = config.modems[index].prefix.concat(prefix); | 111 | config.modems[index].prefix = config.modems[index].prefix.concat(prefix); |
112 | } else { | 112 | } else { |
113 | config.modems[index].prefix = prefix; | 113 | config.modems[index].prefix = prefix; |
114 | } | 114 | } |
115 | 115 | ||
116 | if (index < 0) { | 116 | if (index < 0) { |
117 | res.end('Modem tidak ditemukan'); | 117 | res.end('Modem tidak ditemukan'); |
118 | return; | 118 | return; |
119 | } | 119 | } |
120 | 120 | ||
121 | await writeConfigFile(); | 121 | await writeConfigFile(); |
122 | 122 | ||
123 | res.redirect(`${req.baseUrl}/modem#modem${encodeURIComponent(modemName)}`); | 123 | res.redirect(`${req.baseUrl}/modem#modem${encodeURIComponent(modemName)}`); |
124 | } | 124 | } |
125 | 125 | ||
126 | async function modemUpdateImsi(req, res) { | 126 | async function modemUpdateImsi(req, res) { |
127 | const modemName = (req.body.name || '').trim(); | 127 | const modemName = (req.body.name || '').trim(); |
128 | const imsi = (req.body.imsi || '').trim(); | 128 | const imsi = (req.body.imsi || '').trim(); |
129 | 129 | ||
130 | const index = config.modems.findIndex( | 130 | const index = config.modems.findIndex( |
131 | (item) => item.name.toUpperCase() === modemName.toUpperCase(), | 131 | (item) => item.name.toUpperCase() === modemName.toUpperCase(), |
132 | ); | 132 | ); |
133 | config.modems[index].imsi = imsi; | 133 | config.modems[index].imsi = imsi; |
134 | 134 | ||
135 | if (index < 0) { | 135 | if (index < 0) { |
136 | res.end('Modem tidak ditemukan'); | 136 | res.end('Modem tidak ditemukan'); |
137 | return; | 137 | return; |
138 | } | 138 | } |
139 | 139 | ||
140 | await writeConfigFile(); | 140 | await writeConfigFile(); |
141 | 141 | ||
142 | res.redirect(`${req.baseUrl}/modem#modem${encodeURIComponent(modemName)}`); | 142 | res.redirect(`${req.baseUrl}/modem#modem${encodeURIComponent(modemName)}`); |
143 | } | 143 | } |
144 | 144 | ||
145 | async function modemUpdateCustomIp(req, res) { | 145 | async function modemUpdateCustomIp(req, res) { |
146 | const modemName = (req.body.name || '').trim(); | 146 | const modemName = (req.body.name || '').trim(); |
147 | const url = (req.body.url || '').trim() || null; | 147 | const url = (req.body.url || '').trim() || null; |
148 | const username = (req.body.username || '').trim() || null; | 148 | const username = (req.body.username || '').trim() || null; |
149 | const password = (req.body.password || '').trim() || null; | 149 | const password = (req.body.password || '').trim() || null; |
150 | 150 | ||
151 | const index = config.modems.findIndex( | 151 | const index = config.modems.findIndex( |
152 | (item) => item.name.toUpperCase() === modemName.toUpperCase(), | 152 | (item) => item.name.toUpperCase() === modemName.toUpperCase(), |
153 | ); | 153 | ); |
154 | 154 | ||
155 | config.modems[index].url = url; | 155 | config.modems[index].url = url; |
156 | config.modems[index].username = username; | 156 | config.modems[index].username = username; |
157 | config.modems[index].password = password; | 157 | config.modems[index].password = password; |
158 | 158 | ||
159 | if (index < 0) { | 159 | if (index < 0) { |
160 | res.end('Modem tidak ditemukan'); | 160 | res.end('Modem tidak ditemukan'); |
161 | return; | 161 | return; |
162 | } | 162 | } |
163 | 163 | ||
164 | await writeConfigFile(); | 164 | await writeConfigFile(); |
165 | 165 | ||
166 | res.redirect(`${req.baseUrl}/modem#modem${encodeURIComponent(modemName)}`); | 166 | res.redirect(`${req.baseUrl}/modem#modem${encodeURIComponent(modemName)}`); |
167 | } | 167 | } |
168 | 168 | ||
169 | async function modemDelete(req, res) { | 169 | async function modemDelete(req, res) { |
170 | const modemName = (req.body.name || '').trim(); | 170 | const modemName = (req.body.name || '').trim(); |
171 | 171 | ||
172 | const index = config.modems.findIndex( | 172 | const index = config.modems.findIndex( |
173 | (item) => item.name.toUpperCase() === modemName.toUpperCase(), | 173 | (item) => item.name.toUpperCase() === modemName.toUpperCase(), |
174 | ); | 174 | ); |
175 | 175 | ||
176 | if (index < 0) { | 176 | if (index < 0) { |
177 | res.end('Modem tidak ditemukan'); | 177 | res.end('Modem tidak ditemukan'); |
178 | return; | 178 | return; |
179 | } | 179 | } |
180 | 180 | ||
181 | config.modems.splice(index, 1); | 181 | config.modems.splice(index, 1); |
182 | 182 | ||
183 | await writeConfigFile(); | 183 | await writeConfigFile(); |
184 | 184 | ||
185 | res.redirect(`${req.baseUrl}`); | 185 | res.redirect(`${req.baseUrl}`); |
186 | } | 186 | } |
187 | 187 | ||
188 | router.get('/', (req, res) => { | 188 | router.get('/', (req, res) => { |
189 | res.redirect(`${req.baseUrl}/modem`); // sementara redirect ke modem | 189 | res.redirect(`${req.baseUrl}/modem`); // sementara redirect ke modem |
190 | }); | 190 | }); |
191 | 191 | ||
192 | router.get('/modem', pageMain); | 192 | router.get('/modem', pageMain); |
193 | router.post('/modem/add', express.urlencoded({ extended: true }), modemAdd); | 193 | router.post('/modem/add', express.urlencoded({ extended: true }), modemAdd); |
194 | router.post('/modem/add-prefix', express.urlencoded({ extended: true }), modemAddPrefix); | 194 | router.post('/modem/add-prefix', express.urlencoded({ extended: true }), modemAddPrefix); |
195 | router.post('/modem/update-imsi', express.urlencoded({ extended: true }), modemUpdateImsi); | 195 | router.post('/modem/update-imsi', express.urlencoded({ extended: true }), modemUpdateImsi); |
196 | router.post('/modem/update-custom-ip', express.urlencoded({ extended: true }), modemUpdateCustomIp); | 196 | router.post('/modem/update-custom-ip', express.urlencoded({ extended: true }), modemUpdateCustomIp); |
197 | router.post('/modem/delete', express.urlencoded({ extended: true }), modemDelete); | 197 | router.post('/modem/delete', express.urlencoded({ extended: true }), modemDelete); |
198 | router.get('/modem/set-outgoing/:modemName/:newValue', pageSetOutgoing); | 198 | router.get('/modem/set-outgoing/:modemName/:newValue', pageSetOutgoing); |
199 | router.get('/modem/del-prefix/:modemName/:prefix', pageDelPrefix); | 199 | router.get('/modem/del-prefix/:modemName/:prefix', pageDelPrefix); |
200 | 200 |