Commit 4d2dd658deab23b90f797d31084d9217cbf66345
Add id query form on home page
cel committed on 8/22/2018, 7:59:03 PMParent: 36c63bc1828456bf3417ff9eb5187cfcb776b3b2
Files changed
index.js | changed |
index.js | |||
---|---|---|---|
@@ -10,8 +10,10 @@ | |||
10 | 10 … | var memo = require('asyncmemo') | |
11 | 11 … | var lru = require('lrucache') | |
12 | 12 … | var webresolve = require('ssb-web-resolver') | |
13 | 13 … | var serveEmoji = require('emoji-server')() | |
14 … | +var refs = require('ssb-ref') | ||
15 … | +var h = require('hyperscript') | ||
14 | 16 … | var { | |
15 | 17 … | MdRenderer, | |
16 | 18 … | renderEmoji, | |
17 | 19 … | formatMsgs, | |
@@ -97,8 +99,10 @@ | |||
97 | 99 … | case '%': return serveId(req, res, m[1], m[3], m[5]) | |
98 | 100 … | case '@': return serveFeed(req, res, m[1], m[3], m[5]) | |
99 | 101 … | case '&': return serveBlob(req, res, sbot, m[1]) | |
100 | 102 … | } | |
103 … | + | ||
104 … | + if (m[4] === '/') return serveHome(req, res, m[5]) | ||
101 | 105 … | return respond(res, 404, 'Not found') | |
102 | 106 … | } | |
103 | 107 … | ||
104 | 108 … | function serveFeed(req, res, feedId, ext) { | |
@@ -524,8 +528,44 @@ | |||
524 | 528 … | fs.createReadStream(file).pipe(res) | |
525 | 529 … | }) | |
526 | 530 … | } | |
527 | 531 … | ||
532 … | +function asLink(id) { | ||
533 … | + if (!id || typeof id !== 'string') return null | ||
534 … | + id = id.trim() | ||
535 … | + if (refs.isLink(id)) return id | ||
536 … | + try { | ||
537 … | + id = decodeURIComponent(id) | ||
538 … | + } catch(e) { | ||
539 … | + return null | ||
540 … | + } | ||
541 … | + if (refs.isLink(id)) return id | ||
542 … | +} | ||
543 … | + | ||
544 … | +function serveHome(req, res, query, conf) { | ||
545 … | + var q = query ? qs.parse(query) : {} | ||
546 … | + var id = asLink(q.id) | ||
547 … | + if (id) { | ||
548 … | + res.writeHead(303, { | ||
549 … | + Location: '/' + (refs.isMsgId(id) ? encodeURIComponent(id) : id) | ||
550 … | + }) | ||
551 … | + return res.end() | ||
552 … | + } | ||
553 … | + res.writeHead(200, { | ||
554 … | + 'Content-Type': 'text/html' | ||
555 … | + }) | ||
556 … | + pull( | ||
557 … | + pull.once(h('form', {method: 'get', action: ''}, | ||
558 … | + h('input', {name: 'id', placeholder: 'id', size: 60, value: q.id || ''}), ' ', | ||
559 … | + h('input', {type: 'submit', value: 'Go'}) | ||
560 … | + ).outerHTML), | ||
561 … | + wrapPage('ssb-viewer'), | ||
562 … | + toPull(res, function (err) { | ||
563 … | + if (err) console.error('[viewer]', err) | ||
564 … | + }) | ||
565 … | + ) | ||
566 … | +} | ||
567 … | + | ||
528 | 568 … | function serveRobots(req, res, conf) { | |
529 | 569 … | var disallow = conf.disallowRobots == null ? true : conf.disallowRobots | |
530 | 570 … | res.end('User-agent: *\n' | |
531 | 571 … | + (disallow ? 'Disallow: /\n' : '')) |
Built with git-ssb-web