]> git.plutz.net Git - rawnet/blob - index.cgi
generalized styling rules
[rawnet] / index.cgi
1 #!/bin/sh
2
3 USER_REGISTRATION=false
4 USER_REQUIREEMAIL=false
5
6 . "${_EXEC:-${0%/*}}"/cgilite/cgilite.sh
7 . "$_EXEC"/cgilite/session.sh nocookie
8 . "$_EXEC"/cgilite/users.sh
9
10 export MD_HTML="false"
11 if [ "$(which awk)" ]; then
12   markdown() { awk -f "$_EXEC/cgilite/markdown.awk"; }
13 else
14   markdown() { busybox awk -f "$_EXEC/cgilite/markdown.awk"; }
15 fi
16
17 checked(){
18   local check="$1"; shift 1;
19   for comp in "$@"; do
20     if [ "$check" = "$comp" ] || [ "$check" -eq "$comp" ]; then
21       printf 'checked="checked"'
22       break;
23     fi 2>/dev/null
24   done
25 }
26 selected(){
27   local check="$1"; shift 1;
28   for comp in "$@"; do
29     if [ "$check" = "$comp" ] || [ "$check" -eq "$comp" ]; then
30       printf 'selected="selected"'
31       break;
32     fi 2>/dev/null
33   done
34 }
35
36 w_user_login(){
37   if [ ! "$USER_ID" ]; then
38     cat <<-EOF
39         [form #user_login .login method=POST
40           [label Login]
41           [input name=uname placeholder="Username or Email" autocomplete=off]
42           [input type=password name=pw placeholder="Passphrase"]
43           [submit "action" "user_login" Login]
44           $([ "$USER_REGISTRATION" = true ] && printf '[a href="%s/register/" Register]' "$_BASE")
45         ]
46         EOF
47   elif [ "$USER_ID" ]; then
48     cat <<-EOF
49         [form #user_login .logout method=POST
50           [p Logged in as [span . $(HTML ${USER_NAME})]]
51           $([ "$USER_REGISTRATION" != true ] && printf '[a href="%s/invite/" Invite Friend]' "$_BASE")
52           [submit "action" "user_logout" Logout]
53         ]
54         EOF
55   fi
56 }
57
58 yield_page(){
59   title="${1:-RAW:NET}" page="$2"
60   printf '%s\r\n' 'Content-Type: text/html; charset=utf-8' \
61                   "Content-Security-Policy: script-src 'none'" \
62                   ''
63   { cat <<-EOF
64         [!DOCTYPE HTML]
65         [html [head
66           [meta name="viewport" content="width=device-width"]
67           [link rel="stylesheet" type="text/css" href="$_BASE/cgilite/common.css"]
68           [link rel="stylesheet" type="text/css" href="$_BASE/rawnet.css"]
69           [title . $(HTML "$title")]
70         ] [body class="$page"
71           [header
72             [form method=POST action="$_BASE/search/"
73               [input name=search placeholder="Search"]
74             ]
75             $(w_user_login)
76           ][main
77         EOF
78   cat
79   printf ']]]'
80   } |"$_EXEC/cgilite/html-sh.sed" -u
81 }
82
83 case ${PATH_INFO} in
84   /favicon.ico) printf '%s\r\n' 'Content-Length: 0' '';;
85   *.css)
86     . "${_EXEC}/cgilite/file.sh"
87     FILE "${_EXEC}/${PATH_INFO}"
88     ;;
89   /login/)
90     if [ "$USER_ID" ]; then
91       REDIRECT "${_BASE}/"
92     else
93       yield_page 'RAW:NET Login' login <<-EOF
94         $(w_user_login)
95         EOF
96     fi
97     ;;
98   /register/)
99     yield_page 'RAW:NET Register User' register <<-EOF
100         $(w_user_register)
101         EOF
102     ;;
103   /recover/)
104     yield_page 'RAW:NET Recover Account' recover <<-EOF
105         $(w_user_recover)
106         EOF
107     ;;
108   /invite/)
109     yield_page 'RAW:NET Invite User' invite <<-EOF
110         $(w_user_invite)
111         EOF
112     ;;
113   /video/*/*.mp4|/video/*/*_thumb.jpg)
114     . "${_EXEC}/cgilite/file.sh"
115     FILE "${_DATA}/${PATH_INFO#/video/}"
116     ;;
117   /|/channel/*) . "${_EXEC}/page_channel.sh";;
118   /playlist/*) . "${_EXEC}/page_playlist.sh";;
119   /search/*) . "${_EXEC}/page_search.sh";;
120   *) . "${_EXEC}/page_404.sh";;
121 esac
122
123 exit 0