App-Phoebe
view release on metacpan or search on metacpan
lib/App/Phoebe/Oddmuse.pm view on Meta::CPAN
# It would be cool if this were streaming...
sub oddmuse_get_raw {
my $stream = shift;
my $url = shift;
$log->debug("Requesting $url");
my $ua = Mojo::UserAgent->new;
my $res = $ua->get($url => {'X-Forwarded-For' => $stream->handle->peerhost})->result;
if ($res->is_success) {
return $res->text;
} elsif ($res->code == 404) {
return "";
}
oddmuse_http_error($stream, $res->code, $res->message, $url); # false
}
sub oddmuse_http_error {
my $stream = shift;
my $code = shift;
my $message = shift;
my $url = shift;
if ($code >= 200 and $code < 300) { $code = 20 }
elsif ($code == 301) { $code = 31 }
elsif ($code >= 300 and $code < 400) { $code = 30 }
elsif ($code == 403) { $code = 60 }
elsif ($code == 404) { $code = 51 }
elsif ($code == 405) { $code = 59 }
elsif ($code >= 400 and $code < 500) { $code = 50 }
elsif ($code >= 500 and $code < 600) { $code = 40 }
else { $code = 50 }
$log->warn("$code $message requesting $url");
$stream->write(encode_utf8 "$code $message\r\n");
return; # false
}
sub oddmuse_serve_file_page {
lib/App/Phoebe/Web.pm view on Meta::CPAN
my $stream = shift;
my $host = shift;
my $space = shift;
my $id = shift;
my $revision = shift;
$log->info("Serve file $id");
my $dir = wiki_dir($host, $space);
my $file = "$dir/file/$id";
my $meta = "$dir/meta/$id";
if (not -f $file) {
$stream->write("HTTP/1.1 404 Error\r\n");
$stream->write("Content-Type: text/plain\r\n");
$stream->write("\r\n");
$stream->write("File not found\r\n");
return;
} elsif (not -f $meta) {
$stream->write("HTTP/1.1 500 Error\r\n");
$stream->write("Content-Type: text/plain\r\n");
$stream->write("\r\n");
$stream->write("Metadata not found\r\n");
return;
lib/App/Phoebe/WebDAV.pm view on Meta::CPAN
$propstat->addChild($okprops);
my $stat = $doc->createElement('D:status');
$stat->appendText('HTTP/1.1 200 OK');
$propstat->addChild($stat);
$resp->addChild($propstat);
}
if ($nfprops->hasChildNodes) {
my $propstat = $doc->createElement('D:propstat');
$propstat->addChild($nfprops);
my $stat = $doc->createElement('D:status');
$stat->appendText('HTTP/1.1 404 Not Found');
$propstat->addChild($stat);
$resp->addChild($propstat);
}
}
my $str = $doc->toString(1);
my $len = length($str);
$log->debug("RESPONSE: 207\n" . $doc->toString(1));
$stream->write("HTTP/1.1 207 Multi-Status\r\n");
$stream->write("Content-Type: application/xml; charset=\"utf-8\"\r\n");
$stream->write("Content-Length: $len\r\n");
t/Galleries.t view on Meta::CPAN
require './t/test.pl';
# variables set by test.pl
our $base;
our $dir;
# setup
mkdir("$dir/galleries");
mkdir("$dir/galleries/one");
write_text("$dir/galleries/one/data.json", <<EOT);
{"data":[{"blur":"blurs\/P3111203.jpg","caption":["Grapsus grapsus atop a marine iguana",""],"date":"2020-03-11 16:54","img":["imgs\/P3111203.jpg",[1600,1200]],"original":"P3111203.JPG","sha256":"0192dd7efd4b19e404cadbd3e797355836ee142cdb2eece87b5a23...
EOT
mkdir("$dir/galleries/one/thumbs");
write_text("$dir/galleries/one/thumbs/P3111203.jpg", "TEST");
write_text("$dir/galleries/one/thumbs/hëad space.jpg", "TÃST");
my $page = query_gemini("$base/do/gallery");
like($page, qr/^20/, "Galleries main page");
like($page, qr/^# Galleries/m, "Main title");
like($page, qr/^=> $base\/do\/gallery\/one One/m, "Link to album");
t/oddmuse-wiki.pl view on Meta::CPAN
my ($class, $resolved, $title, $exists) = ResolveId($id);
if ($class and $class eq 'near' and not GetParam('rcclusteronly', 0)) { # nearlink (is url)
print $q->redirect({-uri=>$resolved});
} elsif ($class and $class eq 'alias') { # an anchor was found instead of a page
ReBrowsePage($resolved);
} elsif (not $resolved and $NotFoundPg and $id !~ /$CommentsPattern/) { # custom page-not-found message
BrowsePage($NotFoundPg);
} elsif ($resolved or $id =~ /$CommentsPattern/ and $1 and $IndexHash{$1}) { # an existing page
BrowsePage(($resolved or $id), GetParam('raw', 0));
} else { # new page!
BrowsePage($id, GetParam('raw', 0), undef, '404 NOT FOUND') if ValidIdOrDie($id);
}
}
sub NewText { # only if no revision is available
my $id = shift;
if ($CommentsPrefix and $id =~ /^($CommentsPrefix)/) {
return T('There are no comments, yet. Be the first to leave a comment!');
} elsif ($id eq $HomePage) {
return T('Welcome!');
} else {
t/oddmuse-wiki.pl view on Meta::CPAN
$Message .= $q->p(T('No redirection for old revisions'));
} elsif (($FreeLinks and $text =~ /^\#REDIRECT\s+\[\[$FreeLinkPattern\]\]/)
or ($WikiLinks and $text =~ /^\#REDIRECT\s+$LinkPattern/)) {
return ReBrowsePage(FreeToNormal($1), $id);
} else {
$Message .= $q->p(T('Invalid link pattern for #REDIRECT'));
}
}
# shortcut if we only need the raw text: no caching, no diffs, no html.
if ($raw) {
print GetHttpHeader('text/plain', $Page{ts}, $IndexHash{$id} ? undef : '404 NOT FOUND');
print $Page{ts} . " # Do not delete this line when editing!\n" if $raw == 2;
print $text;
return;
}
# normal page view
my $msg = GetParam('msg', '');
$Message .= $q->p($msg) if $msg; # show message if the page is shown
SetParam('msg', '');
print GetHeader($id, NormalToFree($id), $oldId, undef, $status);
my $showDiff = GetParam('diff', 0);
( run in 2.089 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )