summaryrefslogtreecommitdiff
path: root/html
diff options
context:
space:
mode:
authorLizzy Hunt <elizabeth.hunt@simponic.xyz>2024-03-09 21:29:25 -0700
committerLizzy Hunt <elizabeth.hunt@simponic.xyz>2024-03-09 21:29:25 -0700
commit67e4b234d31626976ad630043814235c936f8bbf (patch)
treefcf4259005094271ab475d4f55cea1c251357817 /html
parent2c4b0cf6c40d7b866a9c538a4df06bc36e189d89 (diff)
downloadtilde.club-67e4b234d31626976ad630043814235c936f8bbf.tar.gz
tilde.club-67e4b234d31626976ad630043814235c936f8bbf.zip
finish static page
Diffstat (limited to 'html')
-rwxr-xr-xhtml/build.sh18
-rw-r--r--html/fruitvote/.gitignore1
-rw-r--r--html/fruitvote/main.go57
-rw-r--r--html/public/css/style.css77
-rw-r--r--html/public/fruitvote/GoPage.php88
-rw-r--r--html/public/fruitvote/index.php7
-rw-r--r--html/public/img/penguin.gifbin0 -> 53409 bytes
-rw-r--r--html/public/index.php54
-rw-r--r--html/public/template.html38
-rwxr-xr-xhtml/start.sh7
m---------html/staticsimponic0
m---------html/the-abstraction-engine0
12 files changed, 335 insertions, 12 deletions
diff --git a/html/build.sh b/html/build.sh
index 722e1d3..816c324 100755
--- a/html/build.sh
+++ b/html/build.sh
@@ -1,5 +1,23 @@
#!/bin/sh
+mkdir -p ../dist/public_html
+
cp -r ./public ../dist/public_html
+mv staticsimponic/turing-machine ../dist/public_html
+mv staticsimponic/euler-golf ../dist/public_html
+mv staticsimponic/godel-explorer ../dist/public_html
+
+cd the-abstraction-engine/
+npm install
+npm run build
+cd ..
+cp -r the-abstraction-engine/dist ../dist/public_html/the-abstraction-engine
+
+mkdir -p ../dist/fruitvote
+cd fruitvote
+go build -o ../../dist/fruitvote/fruitvote
+cd ..
+cp start.sh ../dist/fruitvote/start.sh
echo "finished building HTML"
+
diff --git a/html/fruitvote/.gitignore b/html/fruitvote/.gitignore
new file mode 100644
index 0000000..ba2906d
--- /dev/null
+++ b/html/fruitvote/.gitignore
@@ -0,0 +1 @@
+main
diff --git a/html/fruitvote/main.go b/html/fruitvote/main.go
new file mode 100644
index 0000000..73c1c17
--- /dev/null
+++ b/html/fruitvote/main.go
@@ -0,0 +1,57 @@
+package main
+
+import (
+ "flag"
+ "fmt"
+ "net"
+ "net/http"
+ "os"
+ "os/exec"
+ "strings"
+)
+
+func indexHandler(w http.ResponseWriter, r *http.Request) {
+ w.WriteHeader(http.StatusOK)
+ w.Write([]byte("Hello, this is a Unix socket HTTP server in Go!"))
+}
+
+func main() {
+ socketPath, users := getArgs()
+ os.Remove(socketPath)
+
+ listener, err := net.Listen("unix", socketPath)
+ if err != nil {
+ panic(err)
+ }
+ os.Chmod(socketPath, 0700)
+ defer listener.Close()
+
+ for _, user := range strings.Split(users, ",") {
+ setACL(socketPath, user)
+ }
+
+ mux := http.NewServeMux()
+ mux.HandleFunc("/", indexHandler)
+
+ http.Serve(listener, mux)
+}
+
+func setACL(socketPath, user string) {
+ cmd := exec.Command("setfacl", "-m", "u:"+user+":rwx", socketPath)
+ if err := cmd.Run(); err != nil {
+ panic("failed to set ACL: " + err.Error())
+ }
+}
+
+func getArgs() (string, string) {
+ socketPath := flag.String("socket-path", "/tmp/go-server.sock", "Path to the Unix socket")
+ users := flag.String("users", "", "Comma-separated list of users for ACL")
+ flag.Parse()
+
+ if *users == "" {
+ fmt.Println("You must specify at least one user with --users")
+ os.Exit(1)
+ }
+
+ return *socketPath, *users
+}
diff --git a/html/public/css/style.css b/html/public/css/style.css
new file mode 100644
index 0000000..a4f243f
--- /dev/null
+++ b/html/public/css/style.css
@@ -0,0 +1,77 @@
+/* Basic Reset */
+*,
+*::before,
+*::after {
+ box-sizing: border-box;
+ margin: 0;
+ padding: 0;
+}
+
+body {
+ background-color: #2a2a2a; /* Dark background */
+ color: #f4c2c2; /* Soft pink text, typical of a girly 90s vibe */
+ font-family: "Comic Sans MS", "Chalkboard SE", sans-serif; /* Retro, playful font */
+
+ padding: 20px;
+}
+
+a {
+ color: #ff47da; /* Bright pink for links */
+ text-decoration: none;
+}
+
+a:hover {
+ text-decoration: underline;
+}
+
+button,
+input[type="submit"],
+input[type="button"] {
+ background-color: #ff69b4; /* Bright pink for buttons */
+ border: none;
+ color: white;
+ padding: 10px 20px;
+ text-transform: uppercase;
+ font-family: "Comic Sans MS", "Chalkboard SE", sans-serif;
+ cursor: pointer;
+ transition: background-color 0.3s ease;
+}
+
+button:hover,
+input[type="submit"]:hover,
+input[type="button"]:hover {
+ background-color: #ff1493; /* Darker pink on hover */
+}
+
+input[type="text"],
+input[type="password"],
+textarea {
+ background-color: #333; /* Darker elements for inputs */
+ border: 1px solid #f4c2c2; /* Soft pink border */
+ color: #f4c2c2; /* Soft pink text */
+ padding: 10px;
+}
+
+/* Example of styling a specific component differently */
+.special-button {
+ background-color: #ff47da; /* A different shade of pink */
+ border-radius: 20px; /* Rounded edges for a more playful look */
+}
+
+h1,
+h2,
+h3,
+h4,
+h5,
+h6 {
+ color: #ff69b4;
+ margin-bottom: 20px;
+}
+
+p {
+ margin-bottom: 20px;
+}
+
+li {
+ margin-left: 20px;
+}
diff --git a/html/public/fruitvote/GoPage.php b/html/public/fruitvote/GoPage.php
new file mode 100644
index 0000000..c3a7d34
--- /dev/null
+++ b/html/public/fruitvote/GoPage.php
@@ -0,0 +1,88 @@
+<?php
+class GoPage {
+ private $page;
+ private $socket;
+ private $template;
+
+ public function __construct($page, $socket = "/home/lizzy/fruitvote/http.sock", $start_cmd="/home/simponic/fruitvote/start.sh", $template="../template.html") {
+ $this->page = $page;
+ $this->socket = $socket;
+ $this->template = $template;
+
+ // test if socket exists
+ if (!file_exists($socket)) {
+ // start the server
+ exec($start_cmd);
+ }
+
+ for ($i = 0; $i < 10; $i++) {
+ if (file_exists($socket)) {
+ break;
+ }
+ usleep(100_000); // wait 100ms
+ }
+
+ if (!file_exists($socket)) {
+ throw new Exception("Could not start server");
+ }
+ }
+ public function go() {
+ $ch = curl_init();
+ $url = "http://localhost".$this->page;
+
+ curl_setopt($ch, CURLOPT_URL, $url);
+ curl_setopt($ch, CURLOPT_UNIX_SOCKET_PATH, $this->socket);
+ curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
+
+ // forward headers
+ $headers = array();
+ foreach ($_SERVER as $key => $value) {
+ if (substr($key, 0, 5) == "HTTP_") {
+ $key = str_replace(" ", "-", ucwords(strtolower(str_replace("_", " ", substr($key, 5)))));
+ $headers[] = "$key: $value";
+ }
+ }
+ curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
+
+ // forward params depending on http method
+ if ($_SERVER['REQUEST_METHOD'] == "POST" || $_SERVER['REQUEST_METHOD'] == "PUT" || $_SERVER['REQUEST_METHOD'] == "DELETE") {
+ curl_setopt($ch, CURLOPT_POST, 1);
+ curl_setopt($ch, CURLOPT_POSTFIELDS, file_get_contents('php://input'));
+ } else {
+ $url .= "?".$_SERVER['QUERY_STRING'];
+ }
+
+ // forward cookies
+ $cookie = array();
+ foreach ($_COOKIE as $key => $value) {
+ $cookie[] = "$key=$value";
+ }
+
+ $output = curl_exec($ch);
+ curl_close($ch);
+
+ // forward headers back to client
+ $headers = explode("\n", $output);
+ foreach ($headers as $header) {
+ if (strpos($header, "HTTP/") === false) {
+ header($header);
+ }
+ }
+
+ // forward cookies back to client
+ $cookie = explode("\n", $output);
+ foreach ($cookie as $cookie) {
+ if (strpos($cookie, "Set-Cookie:") !== false) {
+ header($cookie);
+ }
+ }
+
+ return $output;
+ }
+
+ public function render() {
+ $response = $this->go();
+ $template = file_get_contents($this->template);
+ return str_replace("{{content}}", $response, $template);
+ }
+}
diff --git a/html/public/fruitvote/index.php b/html/public/fruitvote/index.php
new file mode 100644
index 0000000..1abfb0c
--- /dev/null
+++ b/html/public/fruitvote/index.php
@@ -0,0 +1,7 @@
+<?php
+
+require_once("GoPage.php");
+
+$page = new GoPage("/");
+echo $page->render();
+?>
diff --git a/html/public/img/penguin.gif b/html/public/img/penguin.gif
new file mode 100644
index 0000000..48bd0e2
--- /dev/null
+++ b/html/public/img/penguin.gif
Binary files differ
diff --git a/html/public/index.php b/html/public/index.php
index 3ed5805..004a131 100644
--- a/html/public/index.php
+++ b/html/public/index.php
@@ -1,19 +1,49 @@
<?php
-// todo: startup go program if not started. use low cpu priority.
+$content = '
+<p>you are at my <a href="https://tilde.club">tilde.club</a> page right now! hi!</p>
-$ch = curl_init();
-$url = "http:/localhost";
-$unix = "/home/simponic/http.sock";
+<img src="/img/penguin.gif" alt="a penguin" style="width: 200px; height: 200px;"/>
+<p><em>this is a penguin</em></p>
-if (defined('CURLOPT_UNIX_SOCKET_PATH')) {
- curl_setopt($ch, CURLOPT_UNIX_SOCKET_PATH, $unix);
- curl_setopt($ch, CURLOPT_URL, $url);
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
+<p>here you can:</p>
- $response = curl_exec($ch);
- echo $response;
-}
+<ul>
+ <li>vote on your favorite <a href="/fruit">fruit</a></li>
+ <li>play <a href="/the-abstraction-engine">the abstraction engine</a> (WIP)</li>
+ <li>play <a href="/euler-golf">euler golf 2</a></li>
+ <li>program a <a href="/turing-machine">turing machine</a></li>
+ <li>mess with <a href="/godel-explorer">godel numbers</a></li>
+ <li>more to come?</li>
+</ul>
-curl_close($ch);
+<br />
+<br />
+
+<p>
+here are some stuffs i like:
+<ul>
+ <li>penguins, dogs, birds</li>
+ <li>programming (((with parentheses)))</li>
+ <li>compilers, languages, distributed systems</li>
+ <li>emacs</li>
+ <li>math</li>
+ <li>boys (and girls) 🏳️‍🌈</li>
+ <li>gruvbox & catpuccin</li>
+</ul>
+</p>
+
+<p>
+here are some stuffs i don\'t like:
+<ul>
+ <li>bugs (hahahaha)</li>
+ <li>capitalism, expensive healthcare, yadayada</li>
+ <li>mmmm i can\'t think of more</li>
+</ul>
+</p>
+';
+
+$template = file_get_contents('template.html');
+
+echo str_replace("{{content}}", $content, $template);
?>
diff --git a/html/public/template.html b/html/public/template.html
new file mode 100644
index 0000000..4867c55
--- /dev/null
+++ b/html/public/template.html
@@ -0,0 +1,38 @@
+<!DOCTYPE html>
+
+<html>
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <title>~simponic</title>
+
+ <link rel="stylesheet" href="/css/style.css">
+ </head>
+
+ <body>
+ <div>
+ <h1><a href="/">~simponic</a></h1>
+ <ul>
+ <li style="display:inline; margin-right: 20px; margin-left: 0px;"><a href="/">home</a></li>
+ <li style="display:inline; margin-right: 20px; margin-left: 0px;"><a href="/fruitvote">fruitvote</a></li>
+ </ul>
+ </div>
+ <br />
+
+ {{content}}
+
+ <br />
+ <hr />
+ <br />
+
+ <ul>
+ <li style="display:inline; margin-right: 20px; margin-left: 0px;"><a href="https://git.simponic.xyz/simponic">gitea</a></li>
+ <li style="display:inline; margin-right: 20px; margin-left: 0px;"><a href="https://git.simponic.xyz/simponic/tilde.club">source</a></li>
+ <li style="display:inline; margin-right: 20px; margin-left: 0px;"><a href="mailto:elizabeth.hunt@simponic.xyz">email</a></li>
+ <li style="display:inline; margin-right: 20px; margin-left: 0px;"><a href="https://www.linkedin.com/in/simponic/">linkedin</a></li>
+ <li style="display:inline; margin-right: 20px; margin-left: 0px;"><a href="http://tilde.club/~harper/link.html?action=random">random tilde.club page</a></li>
+ </ul>
+ <br />
+ <a href="https://tilde.club"><img src="http://tilde.club/~harper/webring.png" border="0" usemap="#notepad.map"></a>
+ </body>
+</html>
diff --git a/html/start.sh b/html/start.sh
new file mode 100755
index 0000000..3c274a8
--- /dev/null
+++ b/html/start.sh
@@ -0,0 +1,7 @@
+#!/bin/bash
+
+nice -n 19 /home/simponic/fruitvote/fruitvote \
+ --users simponic,nginx \
+ --socket-path /home/simponic/fruitvote/http.sock \
+ --database /home/simponic/fruitvote/db.sqlite \
+ &
diff --git a/html/staticsimponic b/html/staticsimponic
new file mode 160000
+Subproject d3a0fd124549f0f66d80c107ed4a8e73ca2e67e
diff --git a/html/the-abstraction-engine b/html/the-abstraction-engine
new file mode 160000
+Subproject ce403459fa82025bd969d1938ed4034a10c2e75