aboutsummaryrefslogtreecommitdiff
path: root/IkiWiki/UserInfo.pm
diff options
context:
space:
mode:
Diffstat (limited to 'IkiWiki/UserInfo.pm')
-rw-r--r--IkiWiki/UserInfo.pm84
1 files changed, 84 insertions, 0 deletions
diff --git a/IkiWiki/UserInfo.pm b/IkiWiki/UserInfo.pm
new file mode 100644
index 000000000..f4e261563
--- /dev/null
+++ b/IkiWiki/UserInfo.pm
@@ -0,0 +1,84 @@
+#!/usr/bin/perl
+
+use warnings;
+use strict;
+use Storable;
+
+package IkiWiki;
+
+sub userinfo_retrieve () { #{{{
+ my $userinfo=eval{ Storable::lock_retrieve("$config{wikistatedir}/userdb") };
+ return $userinfo;
+} #}}}
+
+sub userinfo_store ($) { #{{{
+ my $userinfo=shift;
+
+ my $oldmask=umask(077);
+ my $ret=Storable::lock_store($userinfo, "$config{wikistatedir}/userdb");
+ umask($oldmask);
+ return $ret;
+} #}}}
+
+sub userinfo_get ($$) { #{{{
+ my $user=shift;
+ my $field=shift;
+
+ my $userinfo=userinfo_retrieve();
+ if (! defined $userinfo ||
+ ! exists $userinfo->{$user} || ! ref $userinfo->{$user} ||
+ ! exists $userinfo->{$user}->{$field}) {
+ return "";
+ }
+ return $userinfo->{$user}->{$field};
+} #}}}
+
+sub userinfo_set ($$$) { #{{{
+ my $user=shift;
+ my $field=shift;
+ my $value=shift;
+
+ my $userinfo=userinfo_retrieve();
+ if (! defined $userinfo ||
+ ! exists $userinfo->{$user} || ! ref $userinfo->{$user}) {
+ return "";
+ }
+
+ $userinfo->{$user}->{$field}=$value;
+ return userinfo_store($userinfo);
+} #}}}
+
+sub userinfo_setall ($$) { #{{{
+ my $user=shift;
+ my $info=shift;
+
+ my $userinfo=userinfo_retrieve();
+ if (! defined $userinfo) {
+ $userinfo={};
+ }
+ $userinfo->{$user}=$info;
+ return userinfo_store($userinfo);
+} #}}}
+
+sub is_admin ($) { #{{{
+ my $user_name=shift;
+
+ return grep { $_ eq $user_name } @{$config{adminuser}};
+} #}}}
+
+sub page_subscribers (@) { #{{{
+ my @ret;
+ my $userinfo=userinfo_retrieve();
+ foreach my $user (keys %{$userinfo}) {
+ if (exists $user->{subscriptions} &&
+ length $user->{subscriptions} &&
+ exists $user->{email} &&
+ length $user->{email} &&
+ grep { globmatch($_, $user->{subscriptions}) } @_) {
+ push @ret, $user->{email};
+ }
+ }
+ return @ret;
+} #}}}
+
+1