jdarwood007 commited on 2023-07-11 19:27:56
Showing 1 changed files, with 63 additions and 4 deletions.
... | ... |
@@ -5,7 +5,7 @@ |
5 | 5 |
<title>SMF Package Parser</title> |
6 | 6 |
<meta name="robots" content="noindex, nofollow"> |
7 | 7 |
<meta name="googlebot" content="noindex, nofollow"> |
8 |
- <meta http-equiv='Content-Security-Policy' CONTENT="default-src 'self'; script-src 'self' 'unsafe-inline' cdn.jsdelivr.net; style-src 'self' 'unsafe-inline' cdn.jsdelivr.net; img-src 'self' data: *; media-src 'self'; connect-src 'self' custom.simplemachines.org github.com; worker-src 'self' data: blob:;">` |
|
8 |
+ <meta http-equiv='Content-Security-Policy' CONTENT="default-src 'self'; script-src 'self' 'unsafe-inline' cdn.jsdelivr.net esm.sh; style-src 'self' 'unsafe-inline' cdn.jsdelivr.net; img-src 'self' data: *; media-src 'self'; connect-src 'self' custom.simplemachines.org *.github.com github.com objects.githubusercontent.com; worker-src 'self' data: blob:;">` |
|
9 | 9 |
<meta name="viewport" content="width=device-width, initial-scale=1"> |
10 | 10 |
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-KK94CHFLLe+nY2dmCWGMq91rCGa5gtU4mk92HdvYe+M/SXH301p5ILy+dN9+nJOZ" crossorigin="anonymous"> |
11 | 11 |
<link rel="modulepreload" crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha3/dist/js/bootstrap.bundle.min.js"> |
... | ... |
@@ -160,7 +160,10 @@ |
160 | 160 |
import bbCodeParser from 'https://cdn.jsdelivr.net/npm/js-bbcode-parser@4.0.0/src/simple.min.js'; |
161 | 161 |
window.bbcParser = bbCodeParser; |
162 | 162 |
</script> |
163 |
- |
|
163 |
+ <script type="module"> |
|
164 |
+ import { Octokit } from 'https://cdn.jsdelivr.net/npm/@octokit/core@5.0.0/+esm'; |
|
165 |
+ window.octokit = new Octokit({}); |
|
166 |
+ </script> |
|
164 | 167 |
<script type="text/javascript" src="./Parser.js"></script> |
165 | 168 |
<script type="text/javascript" src="./languages/en-us.js"></script> |
166 | 169 |
<script type="text/javascript"> |
... | ... |
@@ -189,9 +192,65 @@ |
189 | 192 |
document.getElementById('myfile').addEventListener('change', uploadFileToJS); |
190 | 193 |
}); |
191 | 194 |
|
192 |
- document.getElementById('file').addEventListener('change', function(){ |
|
193 |
- FileName = document.getElementById('file').value; |
|
195 |
+ document.getElementById('file').addEventListener('change', async function(){ |
|
196 |
+ const FileName = document.getElementById('file').value; |
|
197 |
+ |
|
198 |
+ const repoMatch = /https:\/\/github.com\/([^/]+)\/([^/$]+)\/?$/i; |
|
199 |
+ const found = FileName.match(repoMatch); |
|
200 |
+ |
|
201 |
+ if (typeof found === 'undefined' || found === null || !("1" in found) || !("2" in found)) |
|
202 |
+ { |
|
203 |
+ console.debug('Unable to match USERNAME and REPO from requested URL'); |
|
204 |
+ |
|
194 | 205 |
runParser(FileName); |
206 |
+ return; |
|
207 |
+ } |
|
208 |
+ const OWNER = found[1]; |
|
209 |
+ const REPO = found[2]; |
|
210 |
+ |
|
211 |
+ const release = await octokit.request('GET /repos/' + OWNER + '/' + REPO + '/releases/latest', { |
|
212 |
+ owner: OWNER, |
|
213 |
+ repo: REPO, |
|
214 |
+ }); |
|
215 |
+ |
|
216 |
+ if (release.data.id === null) |
|
217 |
+ { |
|
218 |
+ console.debug('Unable to find a release ID'); |
|
219 |
+ return; |
|
220 |
+ } |
|
221 |
+ |
|
222 |
+ const assets = await octokit.request('GET /repos/' + OWNER + '/' + REPO + '/releases/' + release.data.id + 'latest', { |
|
223 |
+ owner: OWNER, |
|
224 |
+ repo: REPO, |
|
225 |
+ release_id: release.data.id |
|
226 |
+ }); |
|
227 |
+ |
|
228 |
+ if (assets.data.assets === null || assets.data.assets.length == 0) |
|
229 |
+ { |
|
230 |
+ console.debug('Unable to find any assets'); |
|
231 |
+ return; |
|
232 |
+ } |
|
233 |
+ |
|
234 |
+ let asset = null; |
|
235 |
+ assets.data.assets.forEach(function(data, index, theArray) { |
|
236 |
+ if (asset === null && (data.name.indexOf("tgz") > 0 || data.name.indexOf("tar.gz") > 0 || data.name.indexOf("zip") > 0)) |
|
237 |
+ { |
|
238 |
+ asset = data; |
|
239 |
+ return; |
|
240 |
+ } |
|
241 |
+ }); |
|
242 |
+ |
|
243 |
+ const fileData = await octokit.request('GET /repos/' + OWNER + '/' + REPO + '/releases/assets/' + asset.id, { |
|
244 |
+ owner: OWNER, |
|
245 |
+ repo: REPO, |
|
246 |
+ asset_id: asset.id, |
|
247 |
+ headers: { |
|
248 |
+ 'Accept': 'application/octet-stream' |
|
249 |
+ } |
|
250 |
+ }); |
|
251 |
+ |
|
252 |
+ console.log(fileData); |
|
253 |
+ // !! TODO File is a blob, can we just send to runParser? |
|
195 | 254 |
}); |
196 | 255 |
</script> |
197 | 256 |
</body> |
198 | 257 |