From 51fce03f59c43f496c8ef2473dc21709c0919473 Mon Sep 17 00:00:00 2001
From: Amin Bandali <bandali@gnu.org>
Date: Thu, 14 May 2020 00:05:39 -0400
Subject: better-organized colophon/oddmuse

---
 colophon/oddmuse/config      | 151 +++++++++++++++++++++++++++++++++++++++++++
 colophon/oddmuse/omecp.pl    |   1 +
 colophon/oddmuse/server.conf |   6 ++
 colophon/oddmuse/server.pl   |  55 ++++++++++++++++
 colophon/oddmuse/version.md  |  52 +++++++++++++++
 5 files changed, 265 insertions(+)
 create mode 100644 colophon/oddmuse/config
 create mode 100644 colophon/oddmuse/omecp.pl
 create mode 100644 colophon/oddmuse/server.conf
 create mode 100644 colophon/oddmuse/server.pl
 create mode 100644 colophon/oddmuse/version.md

(limited to 'colophon/oddmuse')

diff --git a/colophon/oddmuse/config b/colophon/oddmuse/config
new file mode 100644
index 00000000..7ff1d54b
--- /dev/null
+++ b/colophon/oddmuse/config
@@ -0,0 +1,151 @@
+# -*- mode: perl -*-
+use utf8; # this file contains utf8 strings.
+do "$ENV{OMHOME}/omecp.pl";
+
+$CookieName    = 'ECwiki';
+$SiteName      = 'EmacsConf';
+$HomePage      = 'main';
+$RCName        = "recent_changes";
+$FullUrl       = 'https://emacsconf.org';
+$ScriptName    = "$FullUrl";
+# $LogoUrl       = '/s/emacsconf-logo1-64.png';
+$StyleSheet    = '/s/ecom.css';
+$UploadAllowed = 1;
+
+#$SurgeProtectionTime = 10;
+#$SurgeProtectionViews = 50;
+
+# As we're now behind a caching proxy, the environment variable
+# REMOTE_ADDR is no longer what we want. We now want
+# HTTP_X_FORWARDED_FOR.
+$ENV{REMOTE_ADDR} = $ENV{HTTP_X_FORWARDED_FOR};
+
+$HtmlHeaders .= '<link rel="icon" href="/s/emacsconf-logo1-256.png" type="image/png"/>'
+  . '<meta name=viewport content="width=device-width, initial-scale=0.86, maximum-scale=3.0, minimum-scale=0.86"/>';
+
+$SmartTitlesBrowserTitle = '%s - %s - %s';
+$SmartTitlesBrowserTitleWithoutSubtitle = '%s - %s';
+
+$FooterNote = '<p>Permission is granted to copy, distribute and/or
+modify this document under the terms of the
+<a href="https://www.gnu.org/licenses/fdl-1.3-standalone.html">GNU Free Documentation License</a>,
+Version 1.3 or any later version published by the
+<a href="https://www.fsf.org/">Free Software Foundation</a>.</p>
+<p style="font-size:70%"><a href="https://emacsconf.org/colophon">Colophon</a></p>';
+
+$UrlProtocols .= "|data|xmpp";
+
+@UserGotoBarPages = ($RCName);
+# $UserGotoBar = '<a class="local" href="https://emacsconf.org/2019/">2019</a>';
+
+$UserGotoBarPrev = '<a class="local" href="https://emacsconf.org">EmacsConf</a>';
+sub GetGotoBar {
+  my $id = shift;
+  return $q->span({-class=>'gotobar bar'},
+    $UserGotoBarPrev,
+    (map { GetPageLink($_) } @UserGotoBarPages),
+    $UserGotoBar);
+}
+
+# Allow namespaces starting with a digit
+# From https://github.com/kensanata/oddmuse/issues/19#issuecomment-503984930
+$InterSitePattern = '[\p{Uppercase}\d][\w_  ]*';
+# Redefine these as well if you change $InterSitePattern since InitLinkPatterns is called before InitConfig!
+$InterLinkPattern = "($InterSitePattern:[-a-zA-Z0-9\x{0080}-\x{fffd}_=!?#\$\@~`\%&*+\\/:;.,]*[-a-zA-Z0-9\x{0080}-\x{fffd}_=#\$\@~`\%&*+\\/])$QDelim";
+$FreeInterLinkPattern = "($InterSitePattern:[-a-zA-Z0-9\x{0080}-\x{fffd}_=!?#\$\@~`\%&*+\\/:;.,()' ]+)";
+
+# Link to author page at the root namespace
+# From https://github.com/kensanata/oddmuse/issues/20#issuecomment-500402339
+sub GetAuthorLink {
+  my ($username, $host) = @_;
+  $username = FreeToNormal($username);
+  $username =~ s/^(?:$InterSitePattern:)?$FreeLinkPattern/$1/;
+  my $name = NormalToFree($username);
+  if (ValidId($username) ne '') { # ValidId() returns error string
+    $username = '';     # Just pretend it isn't there.
+  }
+  if ($username) {
+    local $ScriptName = $NamespacesRoot;
+    return ScriptLink(UrlEncode($username), $name, 'author');
+  }
+  return T('Anonymous') if $host eq 'Anonymous';
+  return ColorCode($host);
+}
+
+# Fix visiting Main:X if the page doesn't exist but namespace X does.
+# Redirect!
+# From https://github.com/kensanata/oddmuse/issues/19#issuecomment-513640039
+push(@MyInitVariables, \&MyNamespacesFix);
+sub MyNamespacesFix {
+  if (not GetParam('title', '')
+      and GetParam('action', 'browse') eq 'browse') {
+    my $id = FreeToNormal(GetId());
+    if (not $NamespaceCurrent
+        and (not $IndexHash{$id}
+             or OpenPage($id) and PageMarkedForDeletion())
+        and $Namespaces{$id}) {
+      print GetRedirectPage("$id/", NormalToFree($id));
+      exit;
+    }
+  }
+};
+
+@QuestionaskerQuestions =
+  (['Please say HELLO.' => sub {
+      shift =~ /^\s*(hello*|hewo*|hi*|h(i|e)ya*)!*\s*$/i }],
+  );
+
+# If enabling Markdown, to allow users to switch between Creole and Markdown
+# see https://oddmuse.org/wiki/Creole_or_Markdown
+
+$CommentsPrefix = 'comments_on_';
+
+# Add 'Back to ' prefix to the link back to the article
+# with adaptation from https://oddmuse.org/wiki/Comments_on_Comment_Pages
+*MyOldGetFooterLinks = *GetFooterLinks;
+*GetFooterLinks = *MyNewGetFooterLinks;
+
+sub MyNewGetFooterLinks {
+  my $html = MyOldGetFooterLinks(@_);
+  my ($id, $rev) = @_;
+  if ($id and $rev ne 'history' and $rev ne 'edit'
+      and $CommentsPrefix) {
+    if ($id =~ /^$CommentsPrefix(.*)/o) {
+      my $from = NormalToFree($1);
+      my $to = T('Back to ') . $from;
+      $html =~ s/>$from</ accesskey="a">$to</;
+    } else {
+      my $from = NormalToFree($CommentsPrefix);
+      my $to = T('Comments on ');
+      $html =~ s/$from/$to/;
+    }
+  }
+  # $html =~ s!</div>! <a class="local" href="https://emacsconf.org/colophon">Colophon</a></div>!;
+  return $html;
+}
+
+# [[vid:addr]] rule for embedding videos
+push(@MyRules, \&VidRule);
+
+sub VidRule{
+  if (/\G\[\[vid:(\d+\/[a-z0-9-_\.]*)\]\]/cgi) {
+    my $vid = $1;
+    return qq{
+<video controls preload="metadata">
+  <source src="/videos/$vid" type="video/mp4">
+</video><br/>
+<a href="/videos/$vid" download>Download</a>};
+  }
+  return;
+}
+
+# [[vidlink:addr]] rule for linking to videos
+push(@MyRules, \&VidLinkRule);
+
+sub VidLinkRule{
+  if (/\G\[\[vidlink:(\d+\/[a-z0-9-_\.]*)\|(.*)\]\]/cgi) {
+    my ($vid, $cap) = ($1, $2);
+    return qq{<a href="/videos/$vid">$cap</a>};
+  }
+  return;
+}
diff --git a/colophon/oddmuse/omecp.pl b/colophon/oddmuse/omecp.pl
new file mode 100644
index 00000000..c7440144
--- /dev/null
+++ b/colophon/oddmuse/omecp.pl
@@ -0,0 +1 @@
+$AdminPass = 'redacted';
diff --git a/colophon/oddmuse/server.conf b/colophon/oddmuse/server.conf
new file mode 100644
index 00000000..6d10a9d4
--- /dev/null
+++ b/colophon/oddmuse/server.conf
@@ -0,0 +1,6 @@
+{
+  hypnotoad => {
+    listen  => ['http://127.0.0.1:11937'],
+    workers => 10
+  }
+};
diff --git a/colophon/oddmuse/server.pl b/colophon/oddmuse/server.pl
new file mode 100644
index 00000000..8f117219
--- /dev/null
+++ b/colophon/oddmuse/server.pl
@@ -0,0 +1,55 @@
+#!/usr/bin/env perl
+
+# Copyright (C) 2015-2016  Alex Schroeder <alex@gnu.org>
+
+# This program is free software: you can redistribute it and/or modify it under
+# the terms of the GNU General Public License as published by the Free Software
+# Foundation, either version 3 of the License, or (at your option) any later
+# version.
+#
+# This program is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along with
+# this program. If not, see <http://www.gnu.org/licenses/>.
+
+use Mojolicious::Lite;
+
+# This needs to be in a different section, sometimes?
+plugin CGI => {
+  support_semicolon_in_query_string => 1,
+};
+
+plugin CGI => {
+  # route => '/wiki',
+  route => '/',
+  # We need this for older versions of Mojolicious::Plugin::CGI
+  script => 'wiki.pl',
+  run => \&OddMuse::DoWikiRequest,
+  before => sub {
+    no warnings;
+    $OddMuse::RunCGI = 0;
+    # The default data directory is determined by the environment variable
+    # WikiDataDir and falls back to the following
+    # $OddMuse::DataDir = '/tmp/oddmuse';
+    use warnings;
+    require './build/wiki.pl' unless defined &OddMuse::DoWikiRequest;
+  },
+  env => {
+    "OMHOME" => "/home/omec"
+  },
+  # path to where STDERR from cgi script goes
+  errlog => ($ENV{WikiDataDir} || '/tmp/oddmuse')
+      . "/wiki.log",
+};
+
+#plugin SetUserGroup => {user => "omec", group => "omec"};
+
+#get '/' => sub {
+#  my $self = shift;
+#  $self->redirect_to('/wiki');
+#};
+
+app->plugin('Config');
+app->start;
diff --git a/colophon/oddmuse/version.md b/colophon/oddmuse/version.md
new file mode 100644
index 00000000..35148145
--- /dev/null
+++ b/colophon/oddmuse/version.md
@@ -0,0 +1,52 @@
+<pre>
+<a href="https://alexschroeder.ch/cgit/oddmuse/tag/?id=2.3.14-25-g2cba2d30">wiki.pl</a> (2.3.14-25-g2cba2d30), see <a href="https://www.oddmuse.org">Oddmuse</a>
+
+<a href="https://alexschroeder.ch/cgit/oddmuse/tree/modules/anchors.pl?2.3.14-25-g2cba2d30">anchors.pl</a> (2.3.14-25-g2cba2d30), see <a href="https://www.oddmuse.org/wiki/Local_Anchor_Extension">Local Anchor Extension</a>
+
+<a href="https://alexschroeder.ch/cgit/oddmuse/tree/modules/creole.pl?2.3.14-25-g2cba2d30">creole.pl</a> (2.3.14-25-g2cba2d30), see <a href="https://www.oddmuse.org/wiki/Creole_Markup_Extension">Creole Markup Extension</a>
+
+<a href="https://alexschroeder.ch/cgit/oddmuse/tree/modules/div-foo.pl?2.3.14-25-g2cba2d30">div-foo.pl</a> (2.3.14-25-g2cba2d30), see <a href="https://www.oddmuse.org/wiki/Div_Foo_Extension">Div Foo Extension</a>
+
+<a href="https://alexschroeder.ch/cgit/oddmuse/tree/modules/image.pl?2.3.14-25-g2cba2d30">image.pl</a> (2.3.14-25-g2cba2d30), see <a href="https://www.oddmuse.org/wiki/Image_Extension">Image Extension</a>
+
+<a href="https://alexschroeder.ch/cgit/oddmuse/tree/modules/markup.pl?2.3.14-25-g2cba2d30">markup.pl</a> (2.3.14-25-g2cba2d30), see <a href="https://www.oddmuse.org/wiki/Markup_Extension">Markup Extension</a>
+
+<a href="https://alexschroeder.ch/cgit/oddmuse/tree/modules/namespaces.pl?2.3.14-25-g2cba2d30">namespaces.pl</a> (2.3.14-25-g2cba2d30), see <a href="https://www.oddmuse.org/wiki/Namespaces_Extension">Namespaces Extension</a>
+
+<a href="https://alexschroeder.ch/cgit/oddmuse/tree/modules/questionasker.pl?2.3.14-25-g2cba2d30">questionasker.pl</a> (2.3.14-25-g2cba2d30), see <a href="https://www.oddmuse.org/wiki/QuestionAsker_Extension">QuestionAsker Extension</a>
+
+<a href="https://alexschroeder.ch/cgit/oddmuse/tree/modules/smarttitles.pl?2.3.14-25-g2cba2d30">smarttitles.pl</a> (2.3.14-25-g2cba2d30), see <a href="https://www.oddmuse.org/wiki/Smarttitles_Extension">Smarttitles Extension</a>
+
+<a href="https://alexschroeder.ch/cgit/oddmuse/tree/modules/tables.pl?2.3.14-25-g2cba2d30">tables.pl</a> (2.3.14-25-g2cba2d30), see <a href="https://www.oddmuse.org/wiki/Table_Markup_Extension">Table Markup Extension</a>
+
+Mojolicious::Plugin::CGI
+
+Perl v5.28.1
+
+no mod_perl
+
+CGI: 4.40
+
+LWP::UserAgent 6.36
+
+XML::RSS: 1.59
+
+XML::Parser: 2.44
+
+diff (GNU diffutils) 3.7
+Copyright (C) 2018 Free Software Foundation, Inc.
+License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>.
+This is free software: you are free to change and redistribute it.
+There is NO WARRANTY, to the extent permitted by law.
+
+Written by Paul Eggert, Mike Haertel, David Hayes,
+Richard Stallman, and Len Tower.
+
+diff3 (GNU diffutils) 3.7
+Copyright (C) 2018 Free Software Foundation, Inc.
+License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>.
+This is free software: you are free to change and redistribute it.
+There is NO WARRANTY, to the extent permitted by law.
+
+Written by Randy Smith.
+</pre>
-- 
cgit v1.2.3