summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore2
-rw-r--r--Makefile12
-rw-r--r--dumpClient.go53
-rw-r--r--files/index.html200
-rw-r--r--files/repo.html11
-rw-r--r--files/skeleton.v2.css418
-rw-r--r--https.go18
-rw-r--r--main.go64
-rw-r--r--repoHTML.go48
9 files changed, 826 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..6fbd073
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,2 @@
+*.swp
+go.wit.com
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..f6626d8
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,12 @@
+all:
+ echo "build it!"
+ go build -v -x
+ sudo setcap 'cap_net_bind_service=+ep' go.wit.com
+ ./go.wit.com
+ # ./myrepos >/tmp/myrepos.stderr 2>&1
+
+redomod:
+ rm -f go.*
+ GO111MODULE= go mod init
+ GO111MODULE= go mod tidy
+
diff --git a/dumpClient.go b/dumpClient.go
new file mode 100644
index 0000000..928be49
--- /dev/null
+++ b/dumpClient.go
@@ -0,0 +1,53 @@
+package main
+
+import (
+// "fmt"
+ "log"
+ "net/http"
+ "io/ioutil"
+)
+
+func dumpClient(r *http.Request) {
+ // Basic request information
+ log.Println("Method:", r.Method)
+ log.Println("URL:", r.URL)
+ log.Println("Protocol:", r.Proto)
+ log.Println("Host:", r.Host)
+ log.Println("Remote Address:", r.RemoteAddr)
+
+ // Headers
+ log.Println("Headers:")
+ for name, values := range r.Header {
+ for _, value := range values {
+ log.Println(name, value)
+ }
+ }
+
+ // Query parameters
+ log.Println("Query Parameters:")
+ for param, values := range r.URL.Query() {
+ for _, value := range values {
+ log.Println(param, value)
+ }
+ }
+
+ // User-Agent
+ log.Println("User-Agent:", r.UserAgent())
+
+ // Content Length
+ log.Println("Content Length:", r.ContentLength)
+
+ // Cookies
+ log.Println("Cookies:")
+ for _, cookie := range r.Cookies() {
+ log.Println(cookie.Name, cookie.Value)
+ }
+
+ // Request Body (if applicable)
+ if r.Body != nil {
+ body, err := ioutil.ReadAll(r.Body)
+ if err == nil {
+ log.Println("Body:", string(body))
+ }
+ }
+}
diff --git a/files/index.html b/files/index.html
new file mode 100644
index 0000000..85aa2a1
--- /dev/null
+++ b/files/index.html
@@ -0,0 +1,200 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <link rel="stylesheet" href="skeleton.v2.css" />
+ <style>
+ #footer {
+ position: fixed;
+ padding: 1% 0% 1% 0%; /* top left bottom right */
+ bottom: 0;
+ width: 100%;
+ /* Height of the footer*/
+ height: 40px;
+ background: lightgrey;
+ }
+ </style>
+ </head>
+</html>
+ <body>
+ <div class="container">
+ <div class="row">
+ <table class="u-full-width">
+ <thead>
+ <tr>
+ <th>Package</th>
+ <th>go get</th>
+ <th>Authoritative sources (IPv6 only)</th>
+ <th>github mirror</th>
+ <th>Documentation</th>
+ </tr>
+ </thead>
+ <tbody>
+
+
+ <tr> <td><h5>log/ (needed for the gui)</h5></td> <td></td> <td></td> <td></td> <td></td> </tr>
+ <tr>
+ <td>log</td>
+ <td> <a href="//go.wit.com/log">go.wit.com/log</a></td>
+ <td> <a href="//git.wit.org/wit/log">git.wit.org/wit/log</a></td>
+ <td> <a href="//github.com/wit-go/log">github.com/wit-go/log</a></td>
+ <td> <a href="//pkg.go.dev/go.wit.com/log"> <img src="goReference.svg" alt="Go Reference" /> </a> </td>
+ </tr>
+
+ <tr> <td></td> <td></td> <td></td> <td></td> <td></td> </tr>
+
+ <tr> <td><h5>gui/ packages</h5></td> <td></td> <td></td> <td></td> <td></td> </tr>
+ <tr>
+ <td>gui/gui</td>
+ <td> <a href="//go.wit.com/gui/gui">go.wit.com/gui/gui</a></td>
+ <td> <a href="//git.wit.org/gui/gui">git.wit.org/gui/gui</a></td>
+ <td> <a href="//github.com/wit-go/gui">github.com/wit-go/gui</a></td>
+ <td> <a href="//pkg.go.dev/go.wit.com/gui/gui"> <img src="goReference.svg" alt="Go Reference" /> </a> </td>
+ </tr>
+ <tr>
+ <td>gui/widget</td>
+ <td> <a href="//go.wit.com/gui/widget">go.wit.com/gui/widget</a></td>
+ <td> <a href="//git.wit.org/gui/widget">git.wit.org/gui/widget</a></td>
+ <td> <a href="//github.com/wit-go/widget">github.com/wit-go/widget</a></td>
+ <td> <a href="//pkg.go.dev/go.wit.com/gui/widget"> <img src="goReference.svg" alt="Go Reference" /> </a> </td>
+ </tr>
+ <tr>
+ <td>gui/gadgets</td>
+ <td> <a href="//go.wit.com/gui/gadgets">go.wit.com/gui/gadgets</a></td>
+ <td> <a href="//git.wit.org/gui/gadgets">git.wit.org/gui/gadgets</a></td>
+ <td> <a href="//github.com/wit-go/gadgets">github.com/wit-go/gadgets</a></td>
+ <td> <a href="//pkg.go.dev/go.wit.com/gui/gadgets"> <img src="goReference.svg" alt="Go Reference" /> </a> </td>
+ </tr>
+ <tr>
+ <td>gui/toolkits</td>
+ <td> <a href="//go.wit.com/gui/toolkits">go.wit.com/gui/toolkits</a></td>
+ <td> <a href="//git.wit.org/gui/toolkits">git.wit.org/gui/toolkits</a></td>
+ <td> <a href="//github.com/wit-go/toolkits">github.com/wit-go/toolkits</a></td>
+ <td> <a href="//pkg.go.dev/go.wit.com/gui/toolkits"> <img src="goReference.svg" alt="Go Reference" /> </a> </td>
+ </tr>
+ <tr>
+ <td>gui/debugger</td>
+ <td> <a href="//go.wit.com/gui/debugger">go.wit.com/gui/debugger</a></td>
+ <td> <a href="//git.wit.org/gui/debugger">git.wit.org/gui/debugger</a></td>
+ <td> <a href="//github.com/wit-go/debugger">github.com/wit-go/debugger</a></td>
+ <td> <a href="//pkg.go.dev/go.wit.com/gui/debugger"> <img src="goReference.svg" alt="Go Reference" /> </a> </td>
+ </tr>
+ <tr>
+ <td>gui/examples</td>
+ <td> <a href="//go.wit.com/gui/examples">go.wit.com/gui/examples</a></td>
+ <td> <a href="//git.wit.org/gui/examples">git.wit.org/gui/examples</a></td>
+ <td> <a href="//github.com/wit-go/examples">github.com/wit-go/examples</a></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>gui/digitalocean</td>
+ <td> <a href="//go.wit.com/gui/digitalocean">go.wit.com/gui/digitalocean</a></td>
+ <td> <a href="//git.wit.org/gui/digitalocean">git.wit.org/gui/digitalocean</a></td>
+ <td> </td>
+ <td> <a href="//pkg.go.dev/go.wit.com/gui/digitalocean"> <img src="goReference.svg" alt="Go Reference" /> </a> </td>
+ </tr>
+ <tr>
+ <td>gui/cloudflare</td>
+ <td> <a href="//go.wit.com/gui/cloudflare">go.wit.com/gui/cloudflare</a></td>
+ <td> <a href="//git.wit.org/gui/cloudflare">git.wit.org/gui/cloudflare</a></td>
+ <td> </td>
+ <td> <a href="//pkg.go.dev/go.wit.com/gui/cloudflare"> <img src="goReference.svg" alt="Go Reference" /> </a> </td>
+ </tr>
+
+ <tr> <td></td> <td></td> <td></td> <td></td> <td></td> </tr>
+ <tr> <td><h5>Applications</h5></td> <td></td> <td></td> <td></td> <td></td> </tr>
+ <tr>
+ <td>control-panel-dns</td>
+ <td> <a href="//go.wit.com/apps/control-panel-dns">go.wit.com/apps/control-panel-dns</a></td>
+ <td> <a href="//git.wit.org/jcarr/control-panel-dns">git.wit.org/jcarr/control-panel-dns</a></td>
+ <td></td>
+ <td> <a href="//pkg.go.dev/go.wit.com/apps/control-panels-dns"> <img src="goReference.svg" alt="Go Reference" /> </a> </td>
+ </tr>
+ <tr>
+ <td>control-panel-digitalocean</td>
+ <td> <a href="//go.wit.com/apps/control-panel-digitalocean">go.wit.com/apps/control-panel-digitalocean</a></td>
+ <td> <a href="//git.wit.org/wit/control-panel-digitalocean">git.wit.org/wit/control-panel-digitalocean</a></td>
+ <td></td>
+ <td> <a href="//pkg.go.dev/go.wit.com/apps/control-panel-digitalocean"> <img src="goReference.svg" alt="Go Reference" /> </a> </td>
+ </tr>
+ <tr>
+ <td>control-panel-cloudflare</td>
+ <td> <a href="//go.wit.com/apps/control-panel-cloudflare">go.wit.com/apps/control-panel-cloudflare</a></td>
+ <td> <a href="//git.wit.org/wit/control-panel-cloudflare">git.wit.org/wit/control-panel-cloudflare</a></td>
+ <td></td>
+ <td> <a href="//pkg.go.dev/go.wit.com/control-panels/cloudflare"> <img src="goReference.svg" alt="Go Reference" /> </a> </td>
+ </tr>
+
+<!--
+ <tr>
+ <td>control-panel-cloudflare</td>
+ <td> <a href="//go.wit.com/control-panel-cloudflare">go.wit.com/control-panel-cloudflare</a></td>
+ <td> <a href="//git.wit.org/wit/control-panel-cloudflare">git.wit.org/wit/control-panel-cloudflare</a></td>
+ <td> <a href="//github.com/wit-go/control-panel-cloudflare">github.com/wit-go/control-panel-cloudflare</a></td>
+ <td> <a href="//pkg.go.dev/go.wit.com/control-panel-cloudflare"> <img src="goReference.svg" alt="Go Reference" /> </a> </td>
+ </tr>
+-->
+
+ <tr> <td></td> <td></td> <td></td> <td></td> <td></td> </tr>
+ <tr> <td><h5>Support packages</h5></td> <td></td> <td></td> <td></td> <td></td> </tr>
+ <!--
+ <tr>
+ <td>go-arg</td>
+ <td> <a href="//go.wit.com/arg">go.wit.com/arg</a></td>
+ <td> <a href="//git.wit.org/gui/arg">git.wit.org/gui/arg</a></td>
+ <td> <a href="//github.com/wit-go/shell">github.com/alexflint/go-arg</a></td>
+ <td> <a href="//pkg.go.dev/go.wit.com/shell"> <img src="goReference.svg" alt="Go Reference" /> </a> </td>
+ </tr>
+ -->
+ <tr>
+ <td>arg</td>
+ <td> <a href="//go.wit.com/arg">go.wit.com/arg</a></td>
+ <td> <a href="//git.wit.org/wit/arg">git.wit.org/wit/arg</a></td>
+ <td> <a href="//github.com/wit-go/go-arg">github.com/wit-go/go-arg</a></td>
+ <td> <a href="//pkg.go.dev/go.wit.com/arg"> <img src="goReference.svg" alt="Go Reference" /> </a> </td>
+ </tr>
+ <tr>
+ <td>spew</td>
+ <td> <a href="//go.wit.com/spew">go.wit.com/spew</a></td>
+ <td> <a href="//git.wit.org/wit/spew">git.wit.org/wit/spew</a></td>
+ <td> <a href="//github.com/wit-go/spew">github.com/wit-go/spew</a></td>
+ <td> <a href="//pkg.go.dev/go.wit.com/spew"> <img src="goReference.svg" alt="Go Reference" /> </a> </td>
+ </tr>
+ <tr>
+ <td>dnssec</td>
+ <td> <a href="//go.wit.com/dnssec">go.wit.com/dnssec</a></td>
+ <td> <a href="//git.wit.org/wit/dnssec">git.wit.org/wit/dnssec</a></td>
+ <td> <a href="//github.com/wit-go/dnssec">github.com/wit-go/dnssec</a></td>
+ <td> <a href="//pkg.go.dev/go.wit.com/dnssec"> <img src="goReference.svg" alt="Go Reference" /> </a> </td>
+ </tr>
+
+ <tr>
+ <td>shell</td>
+ <td> <a href="//go.wit.com/shell">go.wit.com/shell</a></td>
+ <td> <a href="//git.wit.org/wit/shell">git.wit.org/wit/shell</a></td>
+ <td> <a href="//github.com/wit-go/shell">github.com/wit-go/shell</a></td>
+ <td> <a href="//pkg.go.dev/go.wit.com/shell"> <img src="goReference.svg" alt="Go Reference" /> </a> </td>
+ </tr>
+
+<!--
+ <tr>
+ <td></td>
+ <td> <a href=""></a> </td>
+ <td> <a href=""> <img src="goReference.svg" alt="Go Reference" /> </a> </td>
+ </tr>
+-->
+
+
+ </tbody>
+ </table>
+ </div>
+ </div>
+ <!--
+ <center>
+ <div id="footer">
+ simple go git repo list like <a href=http://go.uber.org/>go.uber.org</a><p>
+ </div>
+ </center>
+ -->
+
+ </body>
+</html>
diff --git a/files/repo.html b/files/repo.html
new file mode 100644
index 0000000..c9b9f10
--- /dev/null
+++ b/files/repo.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta name="go-import" content="go.wit.com/gui/gui git https://git.wit.org/gui/gui">
+ <meta name="go-source" content="go.wit.com/gui/gui https://git.wit.org/gui/gui https://git.wit.org/gui/tree/master{/dir} https://git.wit.org/gui/gui/tree/master{/dir}/{file}#L{line}">
+ <meta http-equiv="refresh" content="0; url=https://git.wit.org/gui/gui">
+ </head>
+ <body>
+ Nothing to see here. Please <a href="https://git.wit.org/gui/gui">move along</a>.
+ </body>
+</html>
diff --git a/files/skeleton.v2.css b/files/skeleton.v2.css
new file mode 100644
index 0000000..e70350b
--- /dev/null
+++ b/files/skeleton.v2.css
@@ -0,0 +1,418 @@
+/*
+* Skeleton V2.0.4
+* Copyright 2014, Dave Gamache
+* www.getskeleton.com
+* Free to use under the MIT license.
+* http://www.opensource.org/licenses/mit-license.php
+* 12/29/2014
+*/
+
+
+/* Table of contents
+##################################################
+- Grid
+- Base Styles
+- Typography
+- Links
+- Buttons
+- Forms
+- Lists
+- Code
+- Tables
+- Spacing
+- Utilities
+- Clearing
+- Media Queries
+*/
+
+
+/* Grid
+################################################## */
+.container {
+ position: relative;
+ width: 100%;
+ max-width: 1600px;
+ margin: 0 auto;
+ padding: 0 20px;
+ box-sizing: border-box; }
+.column,
+.columns {
+ width: 100%;
+ float: left;
+ box-sizing: border-box; }
+
+/* For devices larger than 400px */
+@media (min-width: 400px) {
+ .container {
+ width: 85%;
+ padding: 0; }
+}
+
+/* For devices larger than 550px */
+@media (min-width: 550px) {
+ .container {
+ width: 80%; }
+ .column,
+ .columns {
+ margin-left: 4%; }
+ .column:first-child,
+ .columns:first-child {
+ margin-left: 0; }
+
+ .one.column,
+ .one.columns { width: 4.66666666667%; }
+ .two.columns { width: 13.3333333333%; }
+ .three.columns { width: 22%; }
+ .four.columns { width: 30.6666666667%; }
+ .five.columns { width: 39.3333333333%; }
+ .six.columns { width: 48%; }
+ .seven.columns { width: 56.6666666667%; }
+ .eight.columns { width: 65.3333333333%; }
+ .nine.columns { width: 74.0%; }
+ .ten.columns { width: 82.6666666667%; }
+ .eleven.columns { width: 91.3333333333%; }
+ .twelve.columns { width: 100%; margin-left: 0; }
+
+ .one-third.column { width: 30.6666666667%; }
+ .two-thirds.column { width: 65.3333333333%; }
+
+ .one-half.column { width: 48%; }
+
+ /* Offsets */
+ .offset-by-one.column,
+ .offset-by-one.columns { margin-left: 8.66666666667%; }
+ .offset-by-two.column,
+ .offset-by-two.columns { margin-left: 17.3333333333%; }
+ .offset-by-three.column,
+ .offset-by-three.columns { margin-left: 26%; }
+ .offset-by-four.column,
+ .offset-by-four.columns { margin-left: 34.6666666667%; }
+ .offset-by-five.column,
+ .offset-by-five.columns { margin-left: 43.3333333333%; }
+ .offset-by-six.column,
+ .offset-by-six.columns { margin-left: 52%; }
+ .offset-by-seven.column,
+ .offset-by-seven.columns { margin-left: 60.6666666667%; }
+ .offset-by-eight.column,
+ .offset-by-eight.columns { margin-left: 69.3333333333%; }
+ .offset-by-nine.column,
+ .offset-by-nine.columns { margin-left: 78.0%; }
+ .offset-by-ten.column,
+ .offset-by-ten.columns { margin-left: 86.6666666667%; }
+ .offset-by-eleven.column,
+ .offset-by-eleven.columns { margin-left: 95.3333333333%; }
+
+ .offset-by-one-third.column,
+ .offset-by-one-third.columns { margin-left: 34.6666666667%; }
+ .offset-by-two-thirds.column,
+ .offset-by-two-thirds.columns { margin-left: 69.3333333333%; }
+
+ .offset-by-one-half.column,
+ .offset-by-one-half.columns { margin-left: 52%; }
+
+}
+
+
+/* Base Styles
+################################################## */
+/* NOTE
+html is set to 62.5% so that all the REM measurements throughout Skeleton
+are based on 10px sizing. So basically 1.5rem = 15px :) */
+html {
+ font-size: 62.5%; }
+body {
+ font-size: 1.5em; /* currently ems cause chrome bug misinterpreting rems on body element */
+ line-height: 1.6;
+ font-weight: 400;
+ font-family: "Raleway", "HelveticaNeue", "Helvetica Neue", Helvetica, Arial, sans-serif;
+ color: #222; }
+
+
+/* Typography
+################################################## */
+h1, h2, h3, h4, h5, h6 {
+ margin-top: 0;
+ margin-bottom: 2rem;
+ font-weight: 300; }
+h1 { font-size: 4.0rem; line-height: 1.2; letter-spacing: -.1rem;}
+h2 { font-size: 3.6rem; line-height: 1.25; letter-spacing: -.1rem; }
+h3 { font-size: 3.0rem; line-height: 1.3; letter-spacing: -.1rem; }
+h4 { font-size: 2.4rem; line-height: 1.35; letter-spacing: -.08rem; }
+h5 { font-size: 1.8rem; line-height: 1.5; letter-spacing: -.05rem; }
+h6 { font-size: 1.5rem; line-height: 1.6; letter-spacing: 0; }
+
+/* Larger than phablet */
+@media (min-width: 550px) {
+ h1 { font-size: 5.0rem; }
+ h2 { font-size: 4.2rem; }
+ h3 { font-size: 3.6rem; }
+ h4 { font-size: 3.0rem; }
+ h5 { font-size: 2.4rem; }
+ h6 { font-size: 1.5rem; }
+}
+
+p {
+ margin-top: 0; }
+
+
+/* Links
+################################################## */
+a {
+ color: #1EAEDB; }
+a:hover {
+ color: #0FA0CE; }
+
+
+/* Buttons
+################################################## */
+.button,
+button,
+input[type="submit"],
+input[type="reset"],
+input[type="button"] {
+ display: inline-block;
+ height: 38px;
+ padding: 0 30px;
+ color: #555;
+ text-align: center;
+ font-size: 11px;
+ font-weight: 600;
+ line-height: 38px;
+ letter-spacing: .1rem;
+ text-transform: uppercase;
+ text-decoration: none;
+ white-space: nowrap;
+ background-color: transparent;
+ border-radius: 4px;
+ border: 1px solid #bbb;
+ cursor: pointer;
+ box-sizing: border-box; }
+.button:hover,
+button:hover,
+input[type="submit"]:hover,
+input[type="reset"]:hover,
+input[type="button"]:hover,
+.button:focus,
+button:focus,
+input[type="submit"]:focus,
+input[type="reset"]:focus,
+input[type="button"]:focus {
+ color: #333;
+ border-color: #888;
+ outline: 0; }
+.button.button-primary,
+button.button-primary,
+input[type="submit"].button-primary,
+input[type="reset"].button-primary,
+input[type="button"].button-primary {
+ color: #FFF;
+ background-color: #33C3F0;
+ border-color: #33C3F0; }
+.button.button-primary:hover,
+button.button-primary:hover,
+input[type="submit"].button-primary:hover,
+input[type="reset"].button-primary:hover,
+input[type="button"].button-primary:hover,
+.button.button-primary:focus,
+button.button-primary:focus,
+input[type="submit"].button-primary:focus,
+input[type="reset"].button-primary:focus,
+input[type="button"].button-primary:focus {
+ color: #FFF;
+ background-color: #1EAEDB;
+ border-color: #1EAEDB; }
+
+
+/* Forms
+################################################## */
+input[type="email"],
+input[type="number"],
+input[type="search"],
+input[type="text"],
+input[type="tel"],
+input[type="url"],
+input[type="password"],
+textarea,
+select {
+ height: 38px;
+ padding: 6px 10px; /* The 6px vertically centers text on FF, ignored by Webkit */
+ background-color: #fff;
+ border: 1px solid #D1D1D1;
+ border-radius: 4px;
+ box-shadow: none;
+ box-sizing: border-box; }
+/* Removes awkward default styles on some inputs for iOS */
+input[type="email"],
+input[type="number"],
+input[type="search"],
+input[type="text"],
+input[type="tel"],
+input[type="url"],
+input[type="password"],
+textarea {
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ appearance: none; }
+textarea {
+ min-height: 65px;
+ padding-top: 6px;
+ padding-bottom: 6px; }
+input[type="email"]:focus,
+input[type="number"]:focus,
+input[type="search"]:focus,
+input[type="text"]:focus,
+input[type="tel"]:focus,
+input[type="url"]:focus,
+input[type="password"]:focus,
+textarea:focus,
+select:focus {
+ border: 1px solid #33C3F0;
+ outline: 0; }
+label,
+legend {
+ display: block;
+ margin-bottom: .5rem;
+ font-weight: 600; }
+fieldset {
+ padding: 0;
+ border-width: 0; }
+input[type="checkbox"],
+input[type="radio"] {
+ display: inline; }
+label > .label-body {
+ display: inline-block;
+ margin-left: .5rem;
+ font-weight: normal; }
+
+
+/* Lists
+################################################## */
+ul {
+ list-style: circle inside; }
+ol {
+ list-style: decimal inside; }
+ol, ul {
+ padding-left: 0;
+ margin-top: 0; }
+ul ul,
+ul ol,
+ol ol,
+ol ul {
+ margin: 1.5rem 0 1.5rem 3rem;
+ font-size: 90%; }
+li {
+ margin-bottom: 1rem; }
+
+
+/* Code
+################################################## */
+code {
+ padding: .2rem .5rem;
+ margin: 0 .2rem;
+ font-size: 90%;
+ white-space: nowrap;
+ background: #F1F1F1;
+ border: 1px solid #E1E1E1;
+ border-radius: 4px; }
+pre > code {
+ display: block;
+ padding: 1rem 1.5rem;
+ white-space: pre; }
+
+
+/* Tables
+################################################## */
+th,
+td {
+ padding: 12px 15px;
+ text-align: left;
+ border-bottom: 1px solid #E1E1E1; }
+th:first-child,
+td:first-child {
+ padding-left: 0; }
+th:last-child,
+td:last-child {
+ padding-right: 0; }
+
+
+/* Spacing
+################################################## */
+button,
+.button {
+ margin-bottom: 1rem; }
+input,
+textarea,
+select,
+fieldset {
+ margin-bottom: 1.5rem; }
+pre,
+blockquote,
+dl,
+figure,
+table,
+p,
+ul,
+ol,
+form {
+ margin-bottom: 2.5rem; }
+
+
+/* Utilities
+################################################## */
+.u-full-width {
+ width: 100%;
+ box-sizing: border-box; }
+.u-max-full-width {
+ max-width: 100%;
+ box-sizing: border-box; }
+.u-pull-right {
+ float: right; }
+.u-pull-left {
+ float: left; }
+
+
+/* Misc
+################################################## */
+hr {
+ margin-top: 3rem;
+ margin-bottom: 3.5rem;
+ border-width: 0;
+ border-top: 1px solid #E1E1E1; }
+
+
+/* Clearing
+################################################## */
+
+/* Self Clearing Goodness */
+.container:after,
+.row:after,
+.u-cf {
+ content: "";
+ display: table;
+ clear: both; }
+
+
+/* Media Queries
+################################################## */
+/*
+Note: The best way to structure the use of media queries is to create the queries
+near the relevant code. For example, if you wanted to change the styles for buttons
+on small devices, paste the mobile query code up in the buttons section and style it
+there.
+*/
+
+
+/* Larger than mobile */
+@media (min-width: 400px) {}
+
+/* Larger than phablet (also point when grid becomes active) */
+@media (min-width: 550px) {}
+
+/* Larger than tablet */
+@media (min-width: 750px) {}
+
+/* Larger than desktop */
+@media (min-width: 1600px) {}
+
+/* Larger than Desktop HD */
+@media (min-width: 1600px) {}
diff --git a/https.go b/https.go
new file mode 100644
index 0000000..33a1099
--- /dev/null
+++ b/https.go
@@ -0,0 +1,18 @@
+package main
+
+import (
+ "fmt"
+ "net/http"
+)
+
+func https() {
+ http.HandleFunc("/", okHandler)
+
+ certPath := "/etc/letsencrypt/live/yourdomain.com/fullchain.pem"
+ keyPath := "/etc/letsencrypt/live/yourdomain.com/privkey.pem"
+
+ err := http.ListenAndServeTLS(":443", certPath, keyPath, nil)
+ if err != nil {
+ fmt.Println("Error starting HTTPS server:", err)
+ }
+}
diff --git a/main.go b/main.go
new file mode 100644
index 0000000..50bfae4
--- /dev/null
+++ b/main.go
@@ -0,0 +1,64 @@
+package main
+
+import (
+ "fmt"
+ "log"
+ "net/http"
+ "embed"
+)
+
+//go:embed files/*
+var htmlFiles embed.FS
+
+func okHandler(w http.ResponseWriter, r *http.Request) {
+ dumpClient(r)
+ var tmp string
+ tmp = r.URL.String()
+ if tmp == "/test" {
+ findFile(w)
+ return
+ }
+ if tmp == "/gui" {
+ doGui(w, "/gui/gui")
+ return
+ }
+ fmt.Fprintln(w, "OK")
+}
+
+func findFile(w http.ResponseWriter) {
+ fmt.Fprintln(w, "GOT TEST?")
+ pfile, err := htmlFiles.ReadFile("files/repo.html")
+ if (err != nil) {
+ log.Println("ERROR: err")
+ // w.Write(pfile)
+ return
+ }
+
+ var repohtml string
+ repohtml = string(pfile)
+ fmt.Fprintln(w, "GOT GUI?", repohtml)
+ log.Println("repo.html:", repohtml)
+ // w.Close()
+ /*
+ filename = "/tmp/" + name + ".so"
+ log.Error(err, "write out file here", name, filename, len(pfile))
+ f, _ := os.OpenFile(filename, os.O_WRONLY|os.O_CREATE, 0600)
+ f.Close()
+ */
+}
+
+func main() {
+ /*
+ pfile, err := htmlFiles.ReadFile("html/repo.html")
+ if (err != nil) {
+ log.Println("ERROR:", err)
+ // w.Write(pfile)
+ return
+ }
+ */
+ http.HandleFunc("/", okHandler)
+ err := http.ListenAndServe(":80", nil)
+ if err != nil {
+ log.Println("Error starting server:", err)
+ }
+}
diff --git a/repoHTML.go b/repoHTML.go
new file mode 100644
index 0000000..f30fcca
--- /dev/null
+++ b/repoHTML.go
@@ -0,0 +1,48 @@
+package main
+
+import (
+ "fmt"
+ // "log"
+ "net/http"
+)
+
+
+/*
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta name="go-import" content="go.wit.com/gui/gui git https://git.wit.org/gui/gui">
+ <meta name="go-source" content="go.wit.com/gui/gui https://git.wit.org/gui/gui https://git.wit.org/gui/tree/master{/dir} https://git.wit.org/gui/gui/tree/master{/dir}/{file}#L{line}">
+ <meta http-equiv="refresh" content="0; url=https://git.wit.org/gui/gui">
+ </head>
+ <body>
+ Nothing to see here. Please <a href="https://git.wit.org/gui/gui">move along</a>.
+ </body>
+</html>
+*/
+
+func doGui(w http.ResponseWriter, path string) {
+ fmt.Fprintln(w, "<!DOCTYPE html>")
+ fmt.Fprintln(w, "<html>")
+ fmt.Fprintln(w, "<head>")
+ // fmt.Fprintln(w,
+ fmt.Fprintln(w, "<meta name=\"go-import\" content=\"", "go.wit.com/gui/gui", "git", "https://git.wit.org/gui/gui\">")
+ fmt.Fprintln(w, "<meta name=\"go-source\" content=\"", "go.wit.com/gui/gui", "https://git.wit.org/gui/gui", "https://git.wit.org/gui/tree/master{/dir}", "https://git.wit.org/gui/gui/", "tree/master{/dir}/{file}#L{line}", "\"", ">")
+
+ fmt.Fprintln(w, "<meta http-equiv=\"refresh\" content=\"0; url=", "https://git.wit.org/gui/gui", "\">")
+ fmt.Fprintln(w, "</head>")
+ fmt.Fprintln(w, "<body>")
+ fmt.Fprintln(w, "Nothing to see here. Please <a href=\"https://git.wit.org/gui/gui\">move along</a>.\"")
+ fmt.Fprintln(w, "</body>")
+ fmt.Fprintln(w, "</html>")
+
+ /*
+ var tmp string
+ tmp = r.URL.String()
+ if tmp == "/gui" {
+ findFile(w)
+ return
+ }
+ fmt.Fprintln(w, "OK")
+ */
+}