From bc846e39d4c3b10d779523f16cdddb25cc7e87b4 Mon Sep 17 00:00:00 2001 From: silverwizard Date: Wed, 1 Feb 2023 22:46:38 -0500 Subject: [PATCH] Initial Commit --- .gitignore | 1 + Cargo.lock | 211 +++++++++++++++++++++++ Cargo.toml | 10 ++ index.md | 24 +++ src/index.rs | 28 +++ src/main.rs | 43 +++++ src/style.rs | 475 +++++++++++++++++++++++++++++++++++++++++++++++++++ 7 files changed, 792 insertions(+) create mode 100644 .gitignore create mode 100644 Cargo.lock create mode 100644 Cargo.toml create mode 100644 index.md create mode 100644 src/index.rs create mode 100644 src/main.rs create mode 100644 src/style.rs diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/target diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000..31fcb9e --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,211 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +[[package]] +name = "block-buffer" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69cce20737498f97b993470a6e536b8523f0af7892a4f928cceb1ac5e52ebe7e" +dependencies = [ + "generic-array", +] + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "cpufeatures" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28d997bd5e24a5928dd43e46dc529867e207907fe0b239c3477d924f7f2ca320" +dependencies = [ + "libc", +] + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "digest" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f" +dependencies = [ + "block-buffer", + "crypto-common", +] + +[[package]] +name = "generic-array" +version = "0.14.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "libc" +version = "0.2.139" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "201de327520df007757c1f0adce6e827fe8562fbc28bfd9c15571c66ca1f5f79" + +[[package]] +name = "proc-macro2" +version = "1.0.50" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ef7d57beacfaf2d8aee5937dab7b7f28de3cb8b1828479bb5de2a7106f2bae2" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8856d8364d252a14d474036ea1358d63c9e6965c8e5c1885c18f73d70bff9c7b" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "rust-embed" +version = "6.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "283ffe2f866869428c92e0d61c2f35dfb4355293cdfdc48f49e895c15f1333d1" +dependencies = [ + "rust-embed-impl", + "rust-embed-utils", + "walkdir", +] + +[[package]] +name = "rust-embed-impl" +version = "6.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31ab23d42d71fb9be1b643fe6765d292c5e14d46912d13f3ae2815ca048ea04d" +dependencies = [ + "proc-macro2", + "quote", + "rust-embed-utils", + "syn", + "walkdir", +] + +[[package]] +name = "rust-embed-utils" +version = "7.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1669d81dfabd1b5f8e2856b8bbe146c6192b0ba22162edc738ac0a5de18f054" +dependencies = [ + "sha2", + "walkdir", +] + +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "sha2" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "staticwebserver" +version = "0.1.0" +dependencies = [ + "rust-embed", +] + +[[package]] +name = "syn" +version = "1.0.107" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f4064b5b16e03ae50984a5a8ed5d4f8803e6bc1fd170a3cda91a1be4b18e3f5" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "typenum" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" + +[[package]] +name = "unicode-ident" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84a22b9f218b40614adcb3f4ff08b703773ad44fa9423e4e0d346d5db86e4ebc" + +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" + +[[package]] +name = "walkdir" +version = "2.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56" +dependencies = [ + "same-file", + "winapi", + "winapi-util", +] + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-util" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" +dependencies = [ + "winapi", +] + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..0bfce06 --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,10 @@ +[package] +name = "staticwebserver" +version = "0.1.0" +authors = ["silverwizard"] +edition = "2018" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +rust-embed="6.4.2" diff --git a/index.md b/index.md new file mode 100644 index 0000000..c483de7 --- /dev/null +++ b/index.md @@ -0,0 +1,24 @@ +# Obscuritus + +Hello! + +I hope you're not looking for anything too cool here - as this is mostly my musing regarding RPGs, Sysadminning, or homegames. The more I end up doing, the happier I'll be - at some point I'll do more of this. + +If you're looking for old issues of the [Obscuritus](RPGs/Obscuritus_Mag.html) magazine I printed for my ancient Dresden Files game - I still have them, at that link. + +If you're looking for things I've made for print: +I've currently got nothing to put out - hopefully will change + +If you're interested - my [h-card](https://indieweb.org/h-card) is: +

+ +
+ http://obscuritus.ca +
+ + silverwizard@obscuritus.ca +
+ xmpp:silverwizard@obscuritus.ca +
+ http://convenient.email/profile/silverwizard?tab=profile +

diff --git a/src/index.rs b/src/index.rs new file mode 100644 index 0000000..a8cea42 --- /dev/null +++ b/src/index.rs @@ -0,0 +1,28 @@ +#![no_main] + +pub static INDEX: &str = " + +

Obscuritus

+

Hello!

+ +

I hope you're not looking for anything too cool here - as this is mostly my musing regarding RPGs, Sysadminning, or homegames. The more I end up doing, the happier I'll be - at some point I'll do more of this.

+ +

If you're looking for old issues of the Obscuritus magazine I printed for my ancient Dresden Files game - I still have them, at that link.

+ +

If you're looking for things I've made for print: +I've currently got nothing to put out - hopefully will change

+ +

If you're interested - my h-card is:

+ +

+ +
+ http://www.obscuritus.ca +
+ + silverwizard@obscuritus.ca +
+ +
+
http://convenient.email/profile/silverwizard?tab=profile +

"; diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 0000000..a01cdbe --- /dev/null +++ b/src/main.rs @@ -0,0 +1,43 @@ +use std::{ + io::{prelude::*, BufReader}, + net::{TcpListener, TcpStream}, + str, +}; + +#[path = "./index.rs"] +mod index; +#[path = "./style.rs"] +mod style; + +fn main() { + let listener = TcpListener::bind("0.0.0.0:7878").unwrap(); + + for stream in listener.incoming() { + let stream = stream.unwrap(); + + handle_connection(stream); + } +} + +fn handle_connection(mut stream: TcpStream) { + let buf_reader = BufReader::new(&mut stream); + let request_line = buf_reader.lines().next().unwrap().unwrap(); + let mut content = "Error 404

Not Found

"; + let mut status_line = "HTTP/1.1 404 NOT FOUND"; + if request_line == "GET / HTTP/1.1" { + status_line = "HTTP/1.1 200 OK"; + content = "Sean's Got A Webserver

EVERYBODY RUN

"; + }else if request_line == "GET /index.html HTTP/1.1" { + status_line = "HTTP/1.1 200 OK"; + content = index::INDEX; + }else if request_line == "GET /style.css HTTP/1.1" { + status_line = "HTTP/1.1 200 OK"; + content = style::STYLE; + } + let status_line = "HTTP/1.1 200 OK"; + let length = content.len(); + let response = format!( + "{}\r\nContent-Length: {}\r\n\r\n{}" + , status_line, length, content); + stream.write_all(response.as_bytes()); +} diff --git a/src/style.rs b/src/style.rs new file mode 100644 index 0000000..f9328be --- /dev/null +++ b/src/style.rs @@ -0,0 +1,475 @@ +#![no_main] +pub static STYLE: &str = "@font-face { + font-family: 'journal'; + src: url('Gravity.ttf'); + } + + * { transition: all 0.5s ease;} + + + html,body { + min-height:100%; + width:100%; + margin:0; + } + + body { + background-color:#ddd; + color:#000; + font-family:sans-serif; + margin:0; + padding:0; + } + + a { + color:#369; + text-decoration:none; + } + + a:hover { + text-decoration:underline; + } + + .header { + background-image: -moz-linear-gradient(top, #ffffff, #000000); + background-image: -o-linear-gradient(top, #ffffff, #000000); + background-image: -webkit-linear-gradient(top, #ffffff, #000000); + background-image: linear-gradient(top, #ffffff, #000000); + background-color:#ccc; + border:0; + text-align:center; + margin-left:auto; + margin-right:auto; + line-height:.75em; + padding:.5em; + } + + .header a { + border:0; + color:#111; + text-decoration:none; + } + + .headerTitle { + border:0; + font-size:1.5em; + font-weight:700; + margin:0 0 0 .5em; + padding:.25em; + } + + .headerTitle a { + border:0; + text-decoration:none; + color:#444; + } + + .headerTitle a:hover { + border:0; + text-decoration:underline; + } + + .headerSubtitle { + margin-left:1em; + font-size:.5em; + font-style:italic; + text-align:right; + text-shadow:0 0 0 #fff; + } + + code { + background-color:#ddd; + border:0; + padding:0; + font-size:1.15em; + } + + pre { + background-color:#ddd; + font-family:monospace; + max-height:26em; + overflow-y:auto; + border:1px #ccc dotted; + margin:0 .11em 0 1em; + padding:.2em; + } + + blockquote { + font-family:monospace; + text-align:justify; + margin:.2em; + margin-left:3em; + margin-right:3em; + padding:.2em .75em; + font-size:1.2em; + } + + blockquote blockquote { + border:0; + text-align:right; + text-decoration:underline; + font-size:1em; + } + + table { + border-color:#aaa; + border-style:solid; + border-width:1px; + } + + td { + vertical-align:middle; + border-color:transparent; + border-style:solid; + border-width:1px; + } + + .topOfPage a { + background-color:#ddd; + font-size:2em; + position:fixed; + top:50%; + right:1em; + border-radius:.25em; + border:1px solid #ccc; + opacity:0.6; + margin:0 auto; + padding:.2em; + } + + .topOfPage a:hover { + transition:all .5s ease; + text-decoration:none; + opacity:1; + background-color:#aaa; + color:#f0f0f0; + border:1px solid #ddd; + } + + #top { + border-bottom:1px solid #ccc; + } + + #menu { + background-image: linear-gradient(right, #f0f0f0, #000000); + float: left; + border:0; + border-radius: 10px; + overflow:hidden; + text-align:center; + max-width:15%; + margin:0 auto; + border:solid 1px #ccc; + } + + #menu a { + display:inline; + text-decoration:none; + padding:0 .5em; + } + + #menu ul { + list-style-type:none; + list-style-image:none; + background-color:#ddd; + margin:0; + padding:.3em; + } + + #menu li { + display:inline; + line-height:1.2em; + white-space:nowrap; + } + + #menu ul li a { + background-color:transparent; + padding:.1em 1ex; + } + + #menu ul li a:hover { + color:#111; + text-decoration:none; + text-shadow:2px 2px 4px #999; + } + + #menu a.thisPage { + font-weight:700; + color:#444; + font-size:1em; + } + + #main { + color:#111; + background-color:#f0f0f0; + font-family:serif; + font-size:.85em; + text-align:justify; + margin-left:auto; + margin-right:auto; + width:65%; + max-width:65%; + border:solid 1px #ccc; + padding:1em 2em; + margin-bottom: 8em; /*footer height*/ + } + + li {list-style-type: square;} + + #main ul li { + padding:.2em 1em; + } + + #main ul ul ul { + list-style-type:none; + } + + h1 { + text-align:center; + font-size:2em; + color:#444; + border-bottom:1px solid #aaa; + text-shadow:2px 2px 4px #999; + margin:0px .5em 0px 0ex; + } + + h2 { + font-size:1.7em; + color:#444; + border-bottom:1px dotted #aaa; + margin:1em 1em 0px 0ex; + } + + h3 { + font-size:1.45em; + color:#444; + margin:.9em .2em .2ex 0px; + } + + h4 { + font-size:1.2em; + color:#444; + margin:.8em .3em .2ex 0px; + } + + .center { + background-image: -moz-linear-gradient(top, #ffffff, #000000); + background-image: -o-linear-gradient(top, #ffffff, #000000); + background-image: -webkit-linear-gradient(top, #ffffff, #000000); + background-image: linear-gradient(top, #ffffff, #000000); + margin-left:auto; + margin-right:auto; + width:70%; + text-align:center; + } + + .left { + float:left; + margin:0; + padding:0; + } + + .right { + float:right; + margin:0; + padding:0; + } + + #footer { + color:#999999; + border-radius: 28px; + background-image: -moz-linear-gradient(top, #000000, transparent); + background-image: -o-linear-gradient(top, #000000, transparent); + background-image: -webkit-linear-gradient(top, #000000, transparent); + background-image: linear-gradient(top, #000000, transparent); + background-clip: padding-box; + height:3em; + background-color:#ddd; + font-size:.8em; + text-align:center; + position:fixed; + bottom:0px; + right:0px; + z-index:1; + margin:0 auto; + padding:.2em; + width:100%; + opacity:0.91; + } + + #footer:hover { + opacity:1; + } + + #footer img { + margin-left:.2em; + margin-right:.2em; + vertical-align:middle; + } + + #footer .left { + text-align:left; + float:left; + clear:left; + } + + #footer .right { + text-align:right; + } + + abbr,acronym { + border-bottom:1px dotted #333; + cursor:help; + } + + img,table,td,blockquote,code,pre,textarea,input,iframe,object,embed,video { + max-width:100%; + } + + hr { + color:#aaa; + background-color:#aaa; + height:1px; + border:0; + margin-top:0; + margin-bottom:1.5em; + } + + code,pre,samp { + white-space:pre-wrap; + } + + #extrait { + margin-top:1em; + font-family:sans-serif; + font-size:12px; + column-count:2; + -moz-column-count:2; + column-gap:30px; + -moz-column-gap:30px; + } + + #extrait h1 { + color:#444; + border-bottom:0; + text-shadow:0 0 0 #fff; + font-size:14px; + text-align:center; + } + + #extrait h2 {font-size:11px;} + #extrait h3 {font-size:10px;} + + *,textarea,table,td,th,code,pre,samp { + word-wrap:break-word; + hyphens:auto; + } + + p img, p a img { + overflow: hidden; + padding: 10px; + margin-left:auto; + margin-right:auto; + display:block; + } + + p a img:hover { + box-shadow: 2px 2px 6px #999; + text-shadow:2px 2px 6px #999; + } + + #ad { + position:absolute; + width:350px; + top:10%; + right:-370px; + border:1px solid #ccc; + padding: 20px; + background-color:#ccc; + word-wrap:break-word; + hyphens:auto; + } + + #ad:hover { + right:0px; + } + + #imagewall img{ + clear:both; + } + + + form {text-align:center;} + input {text-align:center;} + + + .ca-menu{ + clear:both; + padding:0; + text-shadow: 2px 2px 2px rgba(0,0,0,0.5); + word-wrap:break-word; + hyphens:auto; + margin-left:auto; + margin-right:auto; + text-align:center; + } + .ca-menu li{ + width: 140px; + height: 100px; + position: relative; + display: inline-block; + } + .ca-menu li:last-child{ + margin-right: 0px; + margin-left: 0px; + } + .ca-menu li a{ + text-align: left; + width: 100%; + height: 100%; + position: relative; + display: block; + color: #444; + } + .ca-icon{ + font-family: monospace; + font-size: 6em; + color: #aaa; + position: absolute; + width: 100%; + left: 0px; + text-align: center; + opacity:1; + } + .ca-main{ + font-family: sans; + font-size: 0; + position: absolute; + width: 140px; + text-align: center; + opacity:0; + top:10px; + } + .ca-desc{ + font-family: sans; + font-size: 0; + position: absolute; + width: 140px; + text-align: center; + opacity:0; + top:35px; + } + .ca-menu li:hover .ca-icon{ + font-size:0; + opacity:0; + } + .ca-menu li:hover .ca-main{ + font-size: 1.4em; + opacity: 1; + text-shadow: 0px 0px 0px rgba(0,0,0,0); + } + .ca-menu li:hover .ca-desc{ + font-size: 0.9em; + opacity: 1; + text-shadow: 0px 0px 0px rgba(0,0,0,0); + }";