Initial commit.
This commit is contained in:
commit
a6bcfca0d8
|
@ -0,0 +1 @@
|
|||
certs/
|
|
@ -0,0 +1,54 @@
|
|||
CERT_DAYS=10000
|
||||
COMMAND="./server-main.sh"
|
||||
COUNTRY=LT
|
||||
DOMAIN=localhost
|
||||
|
||||
|
||||
.PHONY: default
|
||||
default: server
|
||||
|
||||
|
||||
### Server ---------------------------------------------------------------------
|
||||
|
||||
.PHONY: server
|
||||
server: socat-server
|
||||
|
||||
|
||||
.PHONY: ncat-server
|
||||
ncat-server: certs
|
||||
ncat -v \
|
||||
--listen --keep-open -p 1965 \
|
||||
--ssl --ssl-cert "certs/${DOMAIN}.crt" --ssl-key "certs/${DOMAIN}.key" \
|
||||
-c "${COMMAND}"
|
||||
|
||||
|
||||
.PHONY: socat-server
|
||||
socat-server: certs
|
||||
socat -d \
|
||||
OPENSSL-LISTEN:1965,cert=certs/${DOMAIN}.crt,key=certs/${DOMAIN}.key,verify=0,reuseaddr,fork \
|
||||
EXEC:${COMMAND}
|
||||
|
||||
|
||||
### Certificates ---------------------------------------------------------------
|
||||
|
||||
.PHONY: show-cert
|
||||
show-cert:
|
||||
openssl x509 -in "certs/${DOMAIN}.crt" -text
|
||||
|
||||
|
||||
.PHONY: clean-certs
|
||||
clean-certs:
|
||||
rm "certs/${DOMAIN}"*
|
||||
|
||||
|
||||
.PHONY: certs
|
||||
certs: \
|
||||
certs/${DOMAIN}.crt
|
||||
|
||||
|
||||
certs/${DOMAIN}.crt: certs/${DOMAIN}.key
|
||||
echo -en ".\n.\n.\n.\n.\n${DOMAIN}\n.\n" | \
|
||||
openssl req -x509 -key "certs/${DOMAIN}.key" -out "$@" -days ${CERT_DAYS} -nodes
|
||||
|
||||
certs/${DOMAIN}.key:
|
||||
openssl genrsa -out "$@" 4096
|
|
@ -0,0 +1,17 @@
|
|||
#!/usr/bin/sh
|
||||
|
||||
read -r URL GARBAGE;
|
||||
|
||||
REQUEST_URL=${URL%?}; # Remove "\r" at the end
|
||||
URL_NO_PROTOCOL=${REQUEST_URL#*://}
|
||||
REQUEST_PATH=/${URL_NO_PROTOCOL#*/}
|
||||
REQUEST_QUERY=${URL#*\?}
|
||||
|
||||
echo "$REQUEST_PATH" | awk \
|
||||
-v REQUEST_PATH="$REQUEST_PATH" \
|
||||
-v REQUEST_QUERY="$REQUEST_QUERY" \
|
||||
-v REQUEST_URL="$REQUEST_URL" \
|
||||
-f srv/exec.awk \
|
||||
-f srv/response.awk \
|
||||
-f srv/tags.awk \
|
||||
-f srv/main.awk
|
|
@ -0,0 +1,5 @@
|
|||
function exec_to_string( cmd ) {
|
||||
cmd | getline getline_output;
|
||||
close( cmd );
|
||||
return getline_output;
|
||||
}
|
|
@ -0,0 +1,25 @@
|
|||
REQUEST_PATH ~ /^\/test/ {
|
||||
response_reset();
|
||||
|
||||
h1( "Test path" );
|
||||
println( "^/test matched" );
|
||||
pre( REQUEST_URL );
|
||||
link( "/", "Back to home" );
|
||||
|
||||
response_ok();
|
||||
}
|
||||
|
||||
REQUEST_PATH == "/" {
|
||||
response_reset();
|
||||
|
||||
h1( "Hello World from Awk!" );
|
||||
println( "This is a test." );
|
||||
pre( REQUEST_URL );
|
||||
link( "/test123", "A test page" );
|
||||
|
||||
println( "Updated " \
|
||||
exec_to_string( "date --iso-8601=seconds" ) \
|
||||
);
|
||||
|
||||
response_ok();
|
||||
}
|
|
@ -0,0 +1,22 @@
|
|||
BEGIN {
|
||||
response_code = "51"
|
||||
response_meta = "text/gemini"
|
||||
response_body = ""
|
||||
}
|
||||
|
||||
END {
|
||||
printf "%s %s\r\n", response_code, response_meta;
|
||||
print response_body
|
||||
}
|
||||
|
||||
function response_ok() {
|
||||
response_code = "20"
|
||||
}
|
||||
|
||||
function response_reset() {
|
||||
response_body = ""
|
||||
}
|
||||
|
||||
function println( arg ) {
|
||||
response_body = response_body "\n" arg;
|
||||
}
|
|
@ -0,0 +1,31 @@
|
|||
function h1( text ) {
|
||||
|
||||
println( "#" text );
|
||||
}
|
||||
|
||||
function h2( text ) {
|
||||
|
||||
println( "##" text );
|
||||
}
|
||||
|
||||
function h3( text ) {
|
||||
|
||||
println( "###" text );
|
||||
}
|
||||
|
||||
function li( text ) {
|
||||
|
||||
println( "* " text );
|
||||
}
|
||||
|
||||
function link( url, text ) {
|
||||
|
||||
println( "=> " url " " text );
|
||||
}
|
||||
|
||||
function pre( text ) {
|
||||
|
||||
println( "```" );
|
||||
println( text );
|
||||
println( "```" );
|
||||
}
|
Loading…
Reference in New Issue