routes/user.js - git - Webernet Explorer _X
git 🏠 Home 👤 Sign up Self hosted git, retro shell
★ otgit, code hosting from the year 2000 ★
📄 octuna / routes / user.js
58 lines · 2.0 KB · Raw
1const auth = require('../lib/auth');
2const data = require('../lib/data');
3const render = require('../lib/render');
4const respond = require('../lib/respond');
5const validate = require('../lib/validate');
6 
7function userPage(req, res, params) {
8 const username = params.user.toLowerCase();
9 if (!validate.isValidName(username)) return respond.notFound(res);
10 
11 const session = auth.getSession(req);
12 const user = data.users().get(username);
13 if (!user) return respond.notFound(res);
14 
15 const isSelf = session && session.username === username;
16 const allRepos = data.repos().values();
17 const visible = allRepos.filter(r => {
18 if (r.owner !== username) return false;
19 if (r.visibility === 'public') return true;
20 return isSelf;
21 }).sort((a, b) => b.createdAt - a.createdAt);
22 
23 const repoCards = visible.map(r => {
24 const tag = r.visibility === 'private'
25 ? '<span class="vis-badge private">private</span>'
26 : '';
27 return `<div class="repo-card">
28 <div class="repo-card-name">
29 <a href="/${render.escape(username)}/${render.escape(r.name)}">${render.escape(r.name)}</a>
30 ${tag}
31 </div>
32 <div class="repo-card-desc">${render.escape(r.description || '')}</div>
33 <div class="repo-card-meta">${render.escape(r.visibility)} &middot; created ${new Date(r.createdAt).toISOString().slice(0, 10)}</div>
34 </div>`;
35 }).join('\n');
36 
37 const joined = new Date(user.createdAt).toISOString().slice(0, 10);
38 const content = render.fill(render.loadView('user.html'), {
39 USERNAME: render.escape(user.username),
40 DISPLAY_NAME: render.escape(user.displayName || user.username),
41 BIO: render.escape(user.bio || ''),
42 JOINED: render.escape(joined),
43 REPOS_HTML: repoCards || '<p>No repositories.</p>',
44 CREATE_LINK: isSelf ? '<a class="btn" href="/settings/new">+ New repository</a>' : ''
45 });
46 
47 res.end(render.page({
48 title: user.username,
49 content,
50 session,
51 addressUrl: req.url
52 }));
53}
54 
55module.exports = function register(router) {
56 router.get('/:user', userPage);
57};
58 
Done 🔒 Internet