Made page gathering dynamic, added favicon, included css, worked on some content, created first bash page. Still very much in-progress but the framework is pretty much done. Needs more CSS and content.

This commit is contained in:
Hyperling 2022-10-08 09:19:40 -05:00
parent 8cfe6e43e2
commit 2e5ef4391a
24 changed files with 190 additions and 90 deletions

104
main.js
View File

@ -1,76 +1,98 @@
#!/usr/bin/node #!/usr/bin/node
'use strict'; 'use strict';
/* /*
2022-09-14 Mockup of what a web server may look like. 2022-09-14 Hyperling
Should serve very quick since it's all from scratch, nothing to load like WordPress. Coding my own website rather than using WordPress or anything bloaty.
May even skip out on things like
*/ */
const app_name = "www.example.com"; //// Libraries ////
let express = require('express'); let express = require('express');
let app = express(); let app = express();
const execSync = require('child_process').execSync; const execSync = require('child_process').execSync;
let pages = {}; const fs = require('fs');
pages.home = require('./pages/home.js');
//pages.notice = require('./pages/notice.js');
let pages_php = {}; //// Global Variables ////
pages.home = './pages/home.php';
//pages.notice = './pages/notice.php';
// Even better, look through ./pages/ for *.php or *.js and add them to the array! const DEBUG = false;
const app_name = "hyperling.com";
let pages = [];
const pages_dir = "./pages/";
const file_types = ["php", "sh"];
let ports = []; let ports = [];
ports.push(8080); ports.push(8080);
async function main() { //// Functions ////
console.log("Starting Main");
async function main() {
console.log("...Starting Main...");
console.log("Set app to return HTML documents.");
app.use(function (req, res, next) { app.use(function (req, res, next) {
res.contentType('text/html'); res.contentType('text/html');
next(); next();
}); });
console.log("Adding Routes"); /* Loop through all file in the pages subdirectory and add the allowed
// file types into the pages array for automatic router creation.
*/
console.log("...Starting Main...");
let ls = await fs.promises.readdir(pages_dir);
if (DEBUG) console.log("DEBUG: Results of ls, ", ls);
for (let file of ls) {
let file_test = file.split(".");
let file_name = file_test[0];
let file_type = file_test[file_test.length - 1];
if (file_types.includes(file_type)) {
if (DEBUG) console.log("DEBUG: Hooray!", file, "is being added.");
pages[file_name] = pages_dir + file;
console.log(" * Added page", file);
} else {
if (DEBUG) console.log("DEBUG: ", file, "is not an approved type, skipping.");
}
}
console.log(" * Pages loaded: ", pages);
//return; // Stop execution FORTESTING
console.log("...Adding Routes...");
let router = express.Router(); let router = express.Router();
/* MANUAL METHOD, SPECIFY EVERY PATH+FILE
router.get('/', function (req, res) { /* AUTOMATIC METHOD BASED ON OBJECT/ARRAY OF PHP scripts
console.log("Fetching"); // Creates routes with the URL of the key and location of the value.
require('lib/home.js'); // one way, maybe? */
}); for (let key in pages) {
router.get('/notice', function (req, res) { console.log(" * Creating router for", key);
pages.notice(req, res); // another way? router.get("/" + key, function (req,res) {
}); console.log(key, "fulfilling request to", req.socket.remoteAddress, "asking for", req.url)
*/ res.send(execSync(pages[key]));
/* AUTOMATIC METHOD BASED ON OBJECT/ARRAY
for page in pages { // FORTESTING pseudocode
router.get("/" + page.key, function (req,res) {
page.value(req, res);
}); });
} }
*/
/* AUTOMATIC METHOD BASED ON OBJECT/ARRAY OF PHP scripts // Provide css.
for page in pages { // FORTESTING pseudocode router.get('/main.css', function (req, res) {
router.get("/" + page.key, function (req,res) { console.log("css being provided to", req.socket.remoteAddress)
res.send(system("php page.value")); let html = execSync("cat ./pages/main.css");
}); res.send(html);
} });
*/
// Test (Also a decent catch-all to Home!) // Originally a test, now a catch-all redirection to Home!
router.get('/*', function (req, res) { router.get('/*', function (req, res) {
// WARNING: These are huge so only look when you need to.
//console.log(req); //console.log(req);
//console.log(res); //console.log(res);
console.log(req.socket.remoteAddress, "asked for", req.url) console.log("*wildcard* replying to", req.socket.remoteAddress, "asking for", req.url)
let html = execSync("php ./pages/home.php"); let html = execSync("./pages/home.php");
res.send(html); res.send(html);
}); });
app.use('', router); app.use('', router);
console.log("Adding Ports"); console.log("...Adding Ports...");
ports.forEach(port => { ports.forEach(port => {
app.listen(port); app.listen(port);
console.log(" * Now listening on port " + port + "."); console.log(" * Now listening on port " + port + ".");
@ -78,4 +100,6 @@ async function main() {
console.log("Done! Now we wait..."); console.log("Done! Now we wait...");
} }
//// Program Execution ////
main(); main();

24
pages/about.php Normal file → Executable file
View File

@ -1,2 +1,26 @@
#!/usr/bin/php #!/usr/bin/php
<?php
include "helpers/body_open.php";
?>
<h1>Curious About Me?</h1>
<p>
TBD
</p>
<?php
include "helpers/section_open.php";
include "subpages/about/whoami.php";
include "helpers/section_close.php";
include "helpers/section_open.php";
include "subpages/about/stance.php";
include "helpers/section_close.php";
include "helpers/section_open.php";
include "subpages/about/notice.php";
include "helpers/section_close.php";
include "helpers/body_close.php";
?>

1
pages/helpers/advisory.php Executable file
View File

@ -0,0 +1 @@
#!/usr/bin/php

3
pages/helpers/body_close.php Normal file → Executable file
View File

@ -1,5 +1,4 @@
#!/usr/bin/php
<?php <?php
include "footer.php" include "footer.php"
?> ?>

9
pages/helpers/body_open.php Normal file → Executable file
View File

@ -1,12 +1,11 @@
#!/usr/bin/php
<?php <?php
include "header.php" include "header.php";
?> ?>
<body> <body>
<?php <?php
include "menu.php" include "menu.php";
include "advisory.php";
?> ?>

9
pages/helpers/footer.php Normal file → Executable file
View File

@ -1,3 +1,6 @@
#!/usr/bin/php
<h6> Copyright $year </h6> <h6>
<a href="https://github.com/Hyperling/www/blob/main/LICENSE" target="_blank">
Copyright <?php echo date("Y"); ?>
</a>
</h6>

View File

@ -1 +0,0 @@
DELETEME

15
pages/helpers/header.php Normal file → Executable file
View File

@ -1,7 +1,16 @@
#!/usr/bin/php
<!DOCTYPE html> <!DOCTYPE html>
<html> <html>
<head> <head>
<title>Hyperling</title>
<link rel="icon" sizes="32x32"
href="https://www.hyperling.com/wp-content/uploads/2020/09/favicon.ico"
/>
<link rel="icon" sizes="192x192"
href="https://www.hyperling.com/wp-content/uploads/2020/09/favicon.ico"
/>
<!--<link rel="stylesheet" href="/main.css">-->
<style>
<?php include "main.css"; ?>
</style>
</head> </head>

View File

@ -40,3 +40,18 @@
clear: both; clear: both;
display: table; display: table;
} }
/* MyStuff ***/
/** Dark Theme **/
body {
background-color: #333333;
}
* {
color: #CCCCCC;
}
a {
color: #FF9900
}
h1,h2,h3,h4,h5,h6 {
color: #6633FF
}

3
pages/helpers/menu.php Normal file → Executable file
View File

@ -1,5 +1,4 @@
#!/usr/bin/php
<ul> <ul>
<li><a href="/home/">Home</a></li> <li><a href="/home/">Home</a></li>
<li><a href="/about/">About</a></li> <li><a href="/about/">About</a></li>

1
pages/helpers/section_close.php Normal file → Executable file
View File

@ -0,0 +1 @@
#!/usr/bin/php

1
pages/helpers/section_open.php Normal file → Executable file
View File

@ -0,0 +1 @@
#!/usr/bin/php

1
pages/subpages/about/notice.php Normal file → Executable file
View File

@ -0,0 +1 @@
#!/usr/bin/php

1
pages/subpages/about/stance.php Normal file → Executable file
View File

@ -0,0 +1 @@
#!/usr/bin/php

1
pages/subpages/about/whoami.php Normal file → Executable file
View File

@ -0,0 +1 @@
#!/usr/bin/php

1
pages/subpages/home/apps.php Normal file → Executable file
View File

@ -1,3 +1,4 @@
#!/usr/bin/php
<h2> My Public Programs </h2> <h2> My Public Programs </h2>
<h3> Android Apps </h3> <h3> Android Apps </h3>

1
pages/subpages/home/contact.php Normal file → Executable file
View File

@ -0,0 +1 @@
#!/usr/bin/php

5
pages/subpages/home/health.php Normal file → Executable file
View File

@ -1,3 +1,4 @@
<h1> My Health Protocol </h1> #!/usr/bin/php
<h1> My Health Protocol </h1>
<!-- URL to MyPriorities.pdf on files.hyperling.com --> <!-- URL to MyPriorities.pdf on files.hyperling.com -->

3
pages/subpages/support/donate.php Normal file → Executable file
View File

@ -1 +1,2 @@
<!-- How people can support me with currency if they so desire. --> #!/usr/bin/php
<!-- How people can support me with currency if they so desire. -->

3
pages/subpages/support/gifts.php Normal file → Executable file
View File

@ -1 +1,2 @@
<!-- Gift ideas such as dried fruit, teas, etc. --> #!/usr/bin/php
<!-- Gift ideas such as dried fruit, teas, etc. -->

4
pages/support.php Normal file → Executable file
View File

@ -8,8 +8,8 @@
include "helpers/body_open.php"; include "helpers/body_open.php";
?> ?>
<h1>Support<h1> <h1>Support</h1>
<p> <p>
While I do not ask for anything, and prefer to take care of myself, While I do not ask for anything, and prefer to take care of myself,
I acknowledge that some people enjoy gift giving and would like to I acknowledge that some people enjoy gift giving and would like to
help me out. Below are my preferred ways that this be done. help me out. Below are my preferred ways that this be done.

31
pages/test.sh Executable file
View File

@ -0,0 +1,31 @@
#!/bin/bash
# Move to the directory that this file is in.
cd `dirname $0`
# Create the necessary HTML components for a web page.
./helpers/body_open.php
echo -e "\t\t<h1>This is a web page written in BASH!!!</h1>"
cat << EOF
<p>
Look at all the fancy things we can do!
</p>
<h2>Current Time</h2>
<p>
We can use the date command to spit out the time!
</p>
<p>
`date`
</p>
EOF
# Create a subsection
./helpers/section_open.php
echo -e "\t\t<h2>Server Neofetch</h2>"
echo -e "\t\t<p>"
neofetch --stdout
echo -e "\t\t</p>"
./helpers/section_close.php
# Finish the web page
./helpers/body_close.php

16
run.sh
View File

@ -2,13 +2,27 @@
# 2022-09-14 Hyperling # 2022-09-14 Hyperling
# Ensure dependencies are met and start the webserver. # Ensure dependencies are met and start the webserver.
# Ensure we are executing from this file's directory.
cd `dirname $0`
### Can docker-compose do this rather than running a sh file on the host OS? ### Can docker-compose do this rather than running a sh file on the host OS?
# Look at Dockerfile-ADD for doing git clones into a docker environment. # Look at Dockerfile-ADD for doing git clones into a docker environment.
# Out of scope for this project, this project is just the site. # Out of scope for this project, this project is just the site, leave for now.
if [[ ! `which php` || ! `which node`|| ! `which npm` ]]; then if [[ ! `which php` || ! `which node`|| ! `which npm` ]]; then
sudo apt install -y php-fpm nodejs npm sudo apt install -y php-fpm nodejs npm
fi fi
# Fix any file permissions
# Directories and allowed page types are executable, others are not.
find ./pages/ | while read file; do
if [[ $file == *".php" || $file == *".sh" || -d $file ]]; then
mode=755
else
mode=644
fi
chmod -c $mode $file
done
npm install npm install
./main.js ./main.js

View File

@ -1,27 +0,0 @@
<!DOCTYPE html>
<html>
<head>
Header
</head>
<body>
MENU
<h1> Welcome! </h1>
<p> This is a test. It can be ignored. :) </p>
<h6> Copyright $year </h6>
</body>
</html>