I lost 4 hours of sleep over this lmao

Signed-off-by: sneedium <sneed@sneedmc.org>
This commit is contained in:
sneedium 2022-09-05 01:20:10 -04:00
parent c5f62b53d7
commit 3bd01a8c29
Signed by: sneedium
GPG Key ID: 906F66490FBE722F
8 changed files with 7831 additions and 1813 deletions

1479
LICENSE

File diff suppressed because it is too large Load Diff

View File

@ -1,7 +1,6 @@
prefix=/usr/local prefix=/usr/local
confdir=/etc confdir=/etc
systemd_dir=${DESTDIR}${confdir}/systemd/system systemd_dir=${DESTDIR}${confdir}/systemd/system
nginx_dir=${DESTDIR}${confdir}/nginx
bindir=${DESTDIR}${prefix}/bin bindir=${DESTDIR}${prefix}/bin
CC := gcc CC := gcc
@ -22,9 +21,6 @@ clean:
$(BIN): $(OBJ) $(BIN): $(OBJ)
$(CC) $(CFLAGS) -o $@ $^ $(LIBS) $(CC) $(CFLAGS) -o $@ $^ $(LIBS)
install-nginx:
@install -Dm644 doc/gsl.nginx ${nginx_dir}/sites-available/gsl
install-systemd: install-systemd:
@install -Dm644 doc/gsl.service ${systemd_dir}/gsl.service @install -Dm644 doc/gsl.service ${systemd_dir}/gsl.service
@install -Dm644 doc/gsl.conf ${DESTDIR}/${confdir}/gsl.conf @install -Dm644 doc/gsl.conf ${DESTDIR}/${confdir}/gsl.conf
@ -32,4 +28,4 @@ install-systemd:
install-bin: install-bin:
@install -Dm755 ${BIN} ${bindir}/${BIN} @install -Dm755 ${BIN} ${bindir}/${BIN}
install: install-bin install-nginx install-systemd install: install-bin install-systemd

3
doc/gsl.conf Normal file
View File

@ -0,0 +1,3 @@
BIN="/usr/bin/gsl"
# replace this with the path to clink (usually /usr/local/bin/clink by default)
PORT=33368

10
doc/gsl.service Normal file
View File

@ -0,0 +1,10 @@
[Unit]
Description=serve gsl
After=network.target
[Service]
EnvironmentFile=/etc/gsl.conf
ExecStart=/bin/sh -c '${BIN} -p ${PORT}'
[Install]
WantedBy=multi-user.target

88
index.h
View File

@ -1,63 +1,31 @@
const char *INDEX_HTML = // FIXME: Change this to licenses.sneedmc.org index. Maybe dynamically generate some crap const char *INDEX_HTML =
"\r\n"
"<!DOCTYPE html>\r\n" "<!DOCTYPE html>\r\n"
"<html lang=en>\r\n" "<html>\r\n"
" <head>\r\n" " <head>\r\n"
" <title>A Minimal, Filesystem-Backed URL Shortener</title>\r\n" " <title>The Giant Sneed Licenses</title>\r\n"
" <meta charset='utf-8'>\r\n" " <meta property=\"og:title\" content=\"The Giant Sneed Licenses\">\r\n"
" <meta http-equiv='X-UA-Compatible' content='IE=edge,chrome=1'>\r\n" " <meta property=\"og:url\" content=\"https://licenses.sneedmc.org\">\r\n"
" <meta http-equiv='Content-Type' content='text/html; charset=utf-8'>\r\n" " <meta property=\"og:description\" content=\"The only licenses you'll ever sneed.\">\r\n"
" <meta name='viewport' content='width=device-width, initial-scale=1'>\r\n" " <meta property=\"og:site_name\" content=\"SneedMC\">\r\n"
" <meta content='A super simple, minimal, and filesystem-backed URL Shortener.' name='description'>\r\n" " <meta property=\"og:type\" content=\"website\">\r\n"
" </head>\r\n" " <meta property=\"og:image\" content=\"https://licenses.sneedmc.org/favicon.ico\">\r\n"
" <body style='font-family: monospace; max-width: 80ch;'>\r\n" " </head>\r\n"
"\r\n" " <body>\r\n"
"<header>\r\n" " <h1>Giant Sneed Licenses</h1>\r\n"
"A Minimal, Filesystem-Backed URL Shortener\r\n" " <p>The only licenses you'll ever sneed.</p>\r\n"
"</header>\r\n" " <p>Sneed. That is all. Also included is a very large penis.</p>\r\n"
"\r\n" " <h2>Licenses available</h2>\r\n"
"<style>\r\n" " <ul>\r\n"
"@media (max-width: 1000px) {\r\n" " <li><a href=\"https://gsl.licenses.sneedmc.org\">GSL</a></li>\r\n"
" pre code {\r\n" " <li><a href=\"https://agsl.licenses.sneedmc.org\">AGSL</a></li>\r\n"
" display: block;\r\n" " <li><a href=\"https://lgsl.licenses.sneedmc.org\">LGSL</a></li>\r\n"
" max-width: 100%%;\r\n" " <li><a href=\"https://gslf.licenses.sneedmc.org\">GSL + Farmer Notice</a></li>\r\n"
" overflow-x: auto;\r\n" " <li><a href=\"https://agslf.licenses.sneedmc.org\">AGSL + Farmer Notice</a></li>\r\n"
" -webkit-overflow-scrolling: touch;\r\n" " <li><a href=\"https://lgslf.licenses.sneedmc.org\">LGSL + Farmer Notice</a></li>\r\n"
" padding: 0 5px 5px 0;\r\n" " </ul>\r\n"
" }\r\n" " <h2>Credits</h2>\r\n"
"}\r\n" " <p><a href=\"https://sneedmc.org\">sneed</a></p>\r\n"
"</style>\r\n" " </body>\r\n"
"\r\n"
"<pre><code>Examples:\r\n"
" 1. Create a short link to https://duckduckgo.com\r\n"
" $ curl -d https://duckduckgo.com %s\r\n"
" %s/502fb5543c36014f\r\n"
"\r\n"
" 2. Create a short link with a custom path\r\n"
" $ curl -d https://duckduckgo.com %s/ddg\r\n"
" %s/ddg\r\n"
"\r\n"
" 3. Create a short link to https://duckduckgo.com using a query string\r\n"
" $ curl %s?https://duckduckgo.com\r\n"
" %s/1acd382417199d7e\r\n"
"\r\n"
" 4. Create a short link with a custom path using a query string\r\n"
" $ curl %s/ddg?https://duckduckgo.com\r\n"
" %s/ddg\r\n"
"\r\n"
" 5. Deleting a short link\r\n"
" $ TMP=$(mktemp)\r\n"
" $ LINK=$(curl -sS %s -d https://duckduckgo.com -D $TMP)\r\n"
" $ # Link created, headers stored in temp file\r\n"
" $ DEL=$(cat $TMP | grep -i delete-with | awk '{print$2}'| tr -d '\\r')\r\n"
" $ # Gets the deletion key, in the 'X-Delete-With' header\r\n"
" $ curl $LINK\r\n"
" &lt;a href=&quot;https://duckduckgo.com&quot;&gt;Permanent Redirect&lt;/a&gt;.\r\n"
" $ curl $LINK -X DELETE -d $DEL\r\n"
" $ curl $LINK\r\n"
" this short link does not exist\r\n"
" $ # Link has been deleted</code></pre>\r\n"
"\r\n"
"<footer style='white-space: pre;'>Source code: <a href='https://short.swurl.xyz/src'>short.swurl.xyz/src</a></a>\r\n"
"</footer>\r\n"
"</html>\r\n"; "</html>\r\n";

15
main.c
View File

@ -15,8 +15,6 @@
char *port = "33368"; // sneed, backwards, in phone number, with the last number changed to 8 cuz sneedmc.org is already on 33367 char *port = "33368"; // sneed, backwards, in phone number, with the last number changed to 8 cuz sneedmc.org is already on 33367
static struct mg_http_serve_opts s_http_server_opts;
void trim(char *str) { void trim(char *str) {
char *_str = str; char *_str = str;
int len = strlen(_str); int len = strlen(_str);
@ -87,10 +85,6 @@ bool eq(const char *s1, const char *s2, int n) {
} }
void handle_url_req(struct mg_connection *nc, char *host, char *link) { void handle_url_req(struct mg_connection *nc, char *host, char *link) {
if (strncmp(link, "favicon.ico", 12) == 0) {
mg_http_reply(nc, 404, "", "Not Found"); // FIXME: sneed cube.
return;
}
char *a_host = strdup(host); char *a_host = strdup(host);
char **host_elements = str_split(a_host, '.'); char **host_elements = str_split(a_host, '.');
@ -98,7 +92,7 @@ void handle_url_req(struct mg_connection *nc, char *host, char *link) {
if (arrlen(host_elements) == 3) { if (arrlen(host_elements) == 3) {
// FIXME: index.html goes here. // FIXME: index.html goes here.
return mg_http_reply(nc, 200, "Content-Type: text/html\r\n", "Sneed\r\n"); return mg_http_reply(nc, 200, "Content-Type: text/html\r\n", "%s\r\n", INDEX_HTML);
} }
char *b_host = strdup(host_elements[0]); char *b_host = strdup(host_elements[0]);
@ -152,7 +146,7 @@ void handle_url_req(struct mg_connection *nc, char *host, char *link) {
} }
} }
mg_http_reply(nc, 200, "", license, output_clauses[0], output_clauses[1], output_clauses[2], host); mg_http_reply(nc, 200, "Content-Type: text/plain; charset=utf-8\r\n", license, output_clauses[0], output_clauses[1], output_clauses[2], host);
free(host_elements); free(host_elements);
free(host_clauses); free(host_clauses);
@ -185,6 +179,11 @@ static void ev_handler(struct mg_connection *nc, int ev, void *p, void *f) {
snprintf(host, mhost.len + 1, "%s", mhost.ptr); snprintf(host, mhost.len + 1, "%s", mhost.ptr);
if (strncmp(hm->method.ptr, "GET", hm->method.len) == 0){ if (strncmp(hm->method.ptr, "GET", hm->method.len) == 0){
if (eq(uri, "favicon.ico", 12) || eq(uri, "sneedcube.png", 14)) {
struct mg_http_serve_opts opts = {.root_dir = "/srv/gsl"}; // Serve local dir
if (ev == MG_EV_HTTP_MSG) mg_http_serve_dir(nc, p, &opts);
return;
}
handle_url_req(nc, host, uri); handle_url_req(nc, host, uri);
} else { } else {
mg_http_reply(nc, 405, "Allow: GET\r\n", ""); mg_http_reply(nc, 405, "Allow: GET\r\n", "");

6933
mongoose.c

File diff suppressed because it is too large Load Diff

1110
mongoose.h

File diff suppressed because it is too large Load Diff