routes/pages.js - git - Webernet Explorer _X
git 🏠 Home 👤 Sign up Self hosted git, retro shell
★ otgit, code hosting from the year 2000 ★
📄 octuna / routes / pages.js
72 lines · 2.9 KB · Raw
1const auth = require('../lib/auth');
2const data = require('../lib/data');
3const render = require('../lib/render');
4const respond = require('../lib/respond');
5const config = require('../lib/config');
6const validate = require('../lib/validate');
7 
8function home(req, res) {
9 const session = auth.getSession(req);
10 const repos = data.repos().values()
11 .filter(r => r.visibility === 'public')
12 .sort((a, b) => b.createdAt - a.createdAt)
13 .slice(0, 20);
14 
15 const repoCards = repos.map(r => {
16 const date = r.createdAt ? new Date(r.createdAt).toISOString().slice(0, 10) : '';
17 const tag = r.visibility === 'private'
18 ? '<span class="vis-badge private">private</span>'
19 : '<span class="vis-badge public">public</span>';
20 return `<div class="repo-card">
21 <div class="repo-card-name">
22 <a href="/${render.escape(r.owner)}/${render.escape(r.name)}">${render.escape(r.owner)}/${render.escape(r.name)}</a>
23 ${tag}
24 </div>
25 <div class="repo-card-desc">${render.escape(r.description || 'No description')}</div>
26 <div class="repo-card-meta">
27 &#128100; <a href="/${render.escape(r.owner)}">${render.escape(r.owner)}</a>
28 &nbsp;&middot;&nbsp; &#128197; ${render.escape(date)}
29 &nbsp;&middot;&nbsp; <a href="/${render.escape(r.owner)}/${render.escape(r.name)}/archive/main.zip">&#11015; ZIP</a>
30 </div>
31 </div>`;
32 }).join('\n');
33 
34 const content = render.fill(render.loadView('home.html'), {
35 SITE_NAME: render.escape(config.get('site.name')),
36 TAGLINE: render.escape(config.get('site.tagline')),
37 REPOS_HTML: repoCards || '<p>No public repositories yet.</p>',
38 SIGNUP_PROMPT: session ? '' : '<p><a href="/signup" class="btn">Create an account</a></p>'
39 });
40 
41 res.end(render.page({ title: '', content, session, addressUrl: '/' }));
42}
43 
44function signupPage(req, res) {
45 const session = auth.getSession(req);
46 if (session) return respond.redirect(res, `/${session.username}`);
47 if (!config.get('auth.allowSignup')) return respond.forbidden(res, 'Signup is disabled');
48 
49 const content = render.loadView('auth.html')
50 .replace('{{FORM_TITLE}}', 'Create account')
51 .replace('{{FORM_ACTION}}', 'signup')
52 .replace('{{SUBMIT_LABEL}}', 'Sign up')
53 .replace('{{EXTRA_FIELDS}}',
54 '<label for="fDisplay">Display name (optional):</label>' +
55 '<input type="text" id="fDisplay" name="displayName" maxlength="64">');
56 
57 res.end(render.page({ title: 'Sign up', content, session: null, addressUrl: '/signup' }));
58}
59 
60function settingsNewRepo(req, res) {
61 const session = auth.requireAuth(req, res);
62 if (!session) return;
63 const content = render.loadView('repo-new.html');
64 res.end(render.page({ title: 'New repository', content, session, addressUrl: '/settings/new' }));
65}
66 
67module.exports = function register(router) {
68 router.get('/', home);
69 router.get('/signup', signupPage);
70 router.get('/settings/new', settingsNewRepo);
71};
72 
Done 🔒 Internet