/usr/share/perl5/IkiWiki/Plugin/controlpanel.pm is in ikiwiki-hosting-common 0.20170622ubuntu1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 | #!/usr/bin/perl
# Allows do=controlpanel to be used to view a control panel of all sites.
package IkiWiki::Plugin::controlpanel;
use warnings;
use strict;
use IkiWiki 3.00;
sub import {
hook(type => "sessioncgi", id => "controlpanel", call => \&sessioncgi);
}
sub sessioncgi ($$) {
my $cgi=shift;
my $session=shift;
return unless defined $cgi->param("do") &&
$cgi->param("do") eq "controlpanel";
IkiWiki::needsignin($cgi, $session);
# Drop ikiwiki lock to avoid blocking other users.
IkiWiki::unlockwiki();
eval q{use IkiWiki::Hosting};
error $@ if $@;
eval q{use URI};
error $@ if $@;
# A single user can have multiple openids and emails.
my $username=$session->param("name");
eval q{use IkiWiki::Customer};
error $@ if $@;
my @accounts=IkiWiki::Customer::account_list($username);
my (@owned_sites, @adminned_sites);
my $num=0;
foreach my $siteinfo (@{IkiWiki::Hosting::yamlgetshell(
"ikisite-wrapper", "list", "--extended",
(map { "--admin=$_"} @accounts),
(map { "--owner=$_"} @accounts),
)}) {
$siteinfo->{cgiurl}=$config{cgiurl};
$siteinfo->{num}=$num++;
# dress up raw timestamp
$siteinfo->{site_created}=displaytime($siteinfo->{site_created});
my $url=URI->new($siteinfo->{site_url});
$siteinfo->{site_domain}=$url->host();
if ($siteinfo->{isowner}) {
push @owned_sites, $siteinfo;
}
else {
push @adminned_sites, $siteinfo;
}
}
if (@owned_sites) {
@owned_sites=sortsites(@owned_sites);
$owned_sites[0]->{first_owned}=1;
$owned_sites[$#owned_sites]->{last_owned}=1;
}
if (@adminned_sites) {
@adminned_sites=sortsites(@adminned_sites);
$adminned_sites[0]->{first_adminned}=1;
$adminned_sites[$#adminned_sites]->{last_adminned}=1;
}
my $template=IkiWiki::Hosting::ikisite_template("controlpanel.tmpl");
$template->param(sites => [@owned_sites, @adminned_sites]);
if (@owned_sites) {
# Add price plan and balance info.
eval q{use IkiWiki::Business};
error $@ if $@;
my $plan=IkiWiki::Business::currentplan($username);
if ($plan) {
$template->param(site_owned_count => int @owned_sites);
$template->param("plan_$plan" => 1);
$template->param(plan_name => IkiWiki::Business::planinfo($plan)->{name});
$template->param(plan_description => IkiWiki::Business::planinfo($plan)->{description});
$template->param(plan_maxsites => IkiWiki::Business::planinfo($plan)->{maxsites});
my $paypal_id=IkiWiki::Business::planinfo($plan)->{paypal_id};
$template->param(paypal_id => $paypal_id) if defined $paypal_id;
}
$template=IkiWiki::Business::balanceinfo($username, $template);
}
# Embed the makesite page.
my $page="makesite";
my $file = $pagesources{$page};
if (defined $file) {
my $type = pagetype($file);
my $content=IkiWiki::htmlize($page, "", $type,
IkiWiki::linkify($page, "",
IkiWiki::preprocess($page, "",
IkiWiki::filter($page, $page,
readfile(srcfile($file))))));
$template->param(makesite => $content);
}
IkiWiki::printheader($session);
print IkiWiki::cgitemplate($cgi, "Control Panel", $template->output);
exit 0;
}
sub sortsites {
sort {
lc $a->{site_wikiname} cmp lc $b->{site_wikiname}
} @_;
}
1
|