summaryrefslogblamecommitdiffstats
path: root/colophon/oddmuse-config.md
blob: aac08db7d5fdde32ea58fcd5af68f958db20729b (plain) (tree)
1
2
3

         
       




































































































































































































































                                                                                                                                                     
## config

```perl
# -*- 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;
}
```

## server.conf

```conf
{
  hypnotoad => {
    listen  => ['http://127.0.0.1:11937'],
    workers => 10
  }
};
```

## server.pl

```perl
#!/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;
```

## ~/omecp.pl

```perl
$AdminPass = 'redacted';
```