diff --git a/README.md b/README.md index 8aa3f19..855ca22 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,45 @@ # website.rb -Ruby CGI scripts that I used to set up my website \ No newline at end of file +Ruby CGI scripts that I used to set up my website + +## What is included + +- listing.rb - generates a recursve listing of files at your preferred location +- markdown.rb - processes markdown (partially) and converts it to HTML + +## How to apply this to your site + +- Drop all .rb files into your web directory root +- Edit markdown.rb and point ROOT\_PATH to the full web directory root path +- Edit listing.rb and point ROOT\_PATH to the full web directory root path and DIR\_PATH to the directory where markdown files are located (they have to be in adirectory under root!) +- If you're using lighttpd: + - Install `mod_cgi` in your config file and add "listing.rb" as an index +``` +server.modules += ("mod_cgi") +index-file.names += ("listing.rb") +cgi.assign = ( + ".rb" => "/usr/bin/ruby" +) +``` +- If you're using apache: + - lmao idk + - just add CGI module, make it run ruby files and make listing.rb an index +- If you're using NGINX: + - Install lighttpd and configure it the same way as above, but use a custom port for the server + - Add `listing.rb` as an index file to your preferred location + - Add a reverse proxy clause in NGINX config to proxy all .md and .rb requests to the lighttpd server +```nginx + ... + + # pass ruby files to lighttpd + location ~ \.rb { + proxy_pass http://127.0.0.1:6969; + } + + # pass .md files as query parameters to markdown.rb + location ~ \.md { + proxy_pass http://127.0.0.1:6969/markdown.rb?docfile=$uri; + } + + ... +``` diff --git a/listing.rb b/listing.rb new file mode 100644 index 0000000..6485239 --- /dev/null +++ b/listing.rb @@ -0,0 +1,84 @@ +#!/usr/bin/ruby +# +#Copyright 2022 Yessiest (yessiest@memeware.net) +# +#Licensed under the Apache License, Version 2.0 (the "License"); +#you may not use this file except in compliance with the License. +#You may obtain a copy of the License at +# +#http://www.apache.org/licenses/LICENSE-2.0 +# +#Unless required by applicable law or agreed to in writing, software +#distributed under the License is distributed on an "AS IS" BASIS, +#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +#See the License for the specific language governing permissions and +#limitations under the License. + +# Ruby CGI module to produce a directory listing of filterable content +# Variables +ROOT_PATH="/var/www/" +DIR_PATH="/var/www/blog" +EXTENSIONS=[".md"] +TEMPLATE_PRE="template.pre.html" +TEMPLATE_POST="template.post.html" +TEMPLATE_CSS="template.css" +# Script +require 'cgi' + +$cgi = CGI.new("html5") + +template_css = "" +template_pre = "" +template_post = "" +if File::exists?( ROOT_PATH+TEMPLATE_CSS ) then + template_css = cgi.link( rel = "stylesheet", href = TEMPLATE_CSS) +end +if File::exists?( ROOT_PATH+TEMPLATE_PRE) then + template_pre_f = File.new( ROOT_PATH+TEMPLATE_PRE, "r") + template_pre = template_pre_f.read + template_pre_f.close +end +if File::exists?( ROOT_PATH+TEMPLATE_POST) then + template_post_f = File.new( ROOT_PATH+TEMPLATE_POST, "r") + template_post = template_post_f.read + template_post_f.close +end + +def listdir(path) + $cgi.ul { + list = "" + Dir.foreach(path) do |fname| + if (not ([".",".."].include? fname)) and + File.directory?(path+"/"+fname) then + list = list+"\n"+ + "
\n\\1\n
") + + # Parse lists + # - Unordered lists + doc = _parse_list(doc) + # - Ordered lists + doc = _parse_list(doc,mode = ["ol",/ *\d*\./]) + + # Bounded markup + # - Bold/Italics + doc = doc.gsub(/(?\\1") + doc = doc.gsub(/(?\\1") + doc = doc.gsub(/(?\\1") + # - Underline + doc = doc.gsub(/(?\\1") + # - Strikethrough + doc = doc.gsub(/(?\\1") + + # Unbounded (line) markup + # - Headers + doc = doc.gsub(/(?<=\n)\#{4} ?(.*)/,"\n\\1
")
+ # - Inline block
+ doc = doc.gsub(/(?\\1")
+
+ template_pre+"\n"+
+ doc+"\n"+
+ template_post+"\n"
+}
+
+cgi.out {
+ cgi.html {
+ cgi.head { "\n"+
+ cgi.title { cgi["docfile"].gsub(/.md$/,"") }+"\n"+
+ template_css
+ } +
+ content
+ }
+}
+