aboutsummaryrefslogtreecommitdiff
path: root/index.sh
blob: cd60cc0c84c37f7c0412e10c46b9e7f8883cd66f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
#!/bin/bash

if [ "$REQUEST_URI" = '/favicon.ico' ]; then
  exit 0
fi

SCRIPT_DIR="$( cd "$( dirname "$(readlink -f "$0")" )" >/dev/null 2>&1 && pwd )"
source ./config.sh

RESPONSE_CONTENT_TYPE="text/html"
STATUS=200

HEADER_TITLE='cd programadores/;cd Jefferson\ Julio/;source jefferson.sh'
HEADER_TITLE_MOBILE="$HEADER_TITLE"

urldecode() { : "${*//+/ }"; echo -e "${_//%/\\x}"; }

status-ok () {
  [ "$STATUS" -gt 199 ] && [ "$STATUS" -lt 300 ] && echo 1
}

strip-html-tags () {
  echo "$1" | sed 's/<[^>]*>//g'
}

sanitize-filename () {
  echo "${1// /\\ }"
}

scape-regex () {
  echo "$1" |
    sed 's/(/\\(/g' |
    sed 's/)/\\)/g' |
    sed 's/|/\\|/g'
}

html () {
  cat <<HTML
<!DOCTYPE html>
<html lang="pt-br">
  <head>
    <meta charset="utf-8" />
    <title>jefferson.sh</title>
    <meta name="viewport" content="width=device-width,initial-scale=1" />
    <link rel="icon" type="image/png" href="/static/favicon.png" />
    <link rel="stylesheet" href="/static/styles.css" />
    <link rel="manifest" href="/static/manifest.json" />
  </head>

  <body>
    $(source ./header.sh)
    $(source ./nav.sh)

    <main>
      $BODY
    </main>

    $(source ./footer.sh)
  </body>
</html>
HTML
}

router () {
  REQUEST_URI=$(urldecode "$REQUEST_URI")

  case "$REQUEST_URI" in
    /)
      BODY=$(source ./pages/home.sh)
      ;;
    /contato)
      HEADER_TITLE="source pages/contato.sh"
      HEADER_TITLE_MOBILE="$HEADER_TITLE"
      BODY=$(source ./pages/contato.sh)
      ;;
    /$ARTICLES_PATH*)
      ARTICLE_FILE=.$REQUEST_URI
      HEADER_TITLE="ARTICLE_FILE=$(sanitize-filename "$ARTICLE_FILE");source pages/article.sh"
      HEADER_TITLE_MOBILE="ARTICLE_FILE=$(sanitize-filename "$ARTICLE_FILE");source pages/article.sh"
      BODY=$(source ./pages/article.sh)
      ;;
    *)
      STATUS=404
      HEADER_TITLE="REQUEST_FILE=.$(sanitize-filename "$REQUEST_URI");source page.sh"
      HEADER_TITLE_MOBILE="$HEADER_TITLE"
      BODY="<p class='err-404'>404: .$REQUEST_URI: Arquivo ou diretório inexistente</p>"
      ;;
  esac
}

router

case "$RESPONSE_CONTENT_TYPE" in
  "text/html")
    RESPONSE_BODY=$(html)
    ;;
  *)
    RESPONSE_BODY=$BODY
esac


cat <<INDEX
Content-Type: $RESPONSE_CONTENT_TYPE
Status: $STATUS

$RESPONSE_BODY
INDEX