summaryrefslogtreecommitdiff
path: root/libpiny
diff options
context:
space:
mode:
Diffstat (limited to 'libpiny')
-rw-r--r--libpiny/debian/changelog6
-rw-r--r--libpiny/debian/control2
-rwxr-xr-xlibpiny/debian/libpiny-perl.postinst16
-rwxr-xr-xlibpiny/debian/libpiny-perl.postrm13
-rw-r--r--libpiny/lib/Piny/Auth.pm74
5 files changed, 110 insertions, 1 deletions
diff --git a/libpiny/debian/changelog b/libpiny/debian/changelog
index 8bd42ee..d9d0db8 100644
--- a/libpiny/debian/changelog
+++ b/libpiny/debian/changelog
@@ -1,3 +1,9 @@
+libpiny-perl (0.17) unstable; urgency=low
+
+ * Added Piny::Auth and key file.
+
+ -- Julian Blake Kongslie <jblake@omgwallhack.org> Sat, 29 Jan 2011 19:50:58 -0800
+
libpiny-perl (0.16) unstable; urgency=low
* Fix some of the mutators in Piny::Repo.
diff --git a/libpiny/debian/control b/libpiny/debian/control
index d066800..2bb329a 100644
--- a/libpiny/debian/control
+++ b/libpiny/debian/control
@@ -8,7 +8,7 @@ Standards-version: 3.9.1
Package: libpiny-perl
Architecture: all
-Depends: ${perl:Depends}, ${misc:Depends}, libconfig-simple-perl, libemail-valid-loose-perl, libmoose-perl, libmoosex-singleton-perl, libmoosex-strictconstructor-perl
+Depends: ${perl:Depends}, ${misc:Depends}, libconfig-simple-perl, libdigest-hmac-perl, libdigest-sha1-perl, libemail-valid-loose-perl, libmoose-perl, libmoosex-singleton-perl, libmoosex-strictconstructor-perl
Description: Perl interface for the piny infrastructure
This is a set of modules for accomplishing administrative tasks in the piny.be
infrastructure.
diff --git a/libpiny/debian/libpiny-perl.postinst b/libpiny/debian/libpiny-perl.postinst
new file mode 100755
index 0000000..ba29e39
--- /dev/null
+++ b/libpiny/debian/libpiny-perl.postinst
@@ -0,0 +1,16 @@
+#!/bin/sh
+
+set -e
+
+case "$1" in
+
+ configure)
+
+ if [ ! -f /etc/libpiny.key ]; then
+ umask 0177
+ dd if=/dev/random of=/etc/libpiny.key bs=512 count=1
+ fi
+
+ ;;
+
+esac
diff --git a/libpiny/debian/libpiny-perl.postrm b/libpiny/debian/libpiny-perl.postrm
new file mode 100755
index 0000000..575ea84
--- /dev/null
+++ b/libpiny/debian/libpiny-perl.postrm
@@ -0,0 +1,13 @@
+#!/bin/sh
+
+set -e
+
+case "$1" in
+
+ purge)
+
+ rm -f /etc/libpiny.key
+
+ ;;
+
+esac
diff --git a/libpiny/lib/Piny/Auth.pm b/libpiny/lib/Piny/Auth.pm
new file mode 100644
index 0000000..2bbf60b
--- /dev/null
+++ b/libpiny/lib/Piny/Auth.pm
@@ -0,0 +1,74 @@
+# Copyright © 2010 Julian Blake Kongslie <jblake@omgwallhack.org>
+# Licensed under the BSD 3-clause license.
+
+use strict;
+use warnings;
+
+package Piny::Auth;
+
+use Moose;
+use MooseX::StrictConstructor;
+
+use Digest::HMAC_SHA1;
+
+# Attributes
+
+has 'key' =>
+ ( is => 'ro'
+ , isa => 'String'
+ , lazy_build => 1
+ );
+
+# Public methods
+
+sub hash {
+ my ( $s, $params ) = @_;
+
+ my $hmac = Digest::HMAC_SHA1->new( $s->key );
+
+ if ( ref $params ) {
+ foreach my $key ( sort keys %$params ) {
+ $hmac->add( length( $key ) . "\0" . $key . "\0" . length( $params->{$key} ) . "\0" . $params->{$key} . "\0" );
+ };
+ } else {
+ $hmac->add( $params );
+ };
+
+ return $hmac->b64digest;
+};
+
+# Builder methods
+
+# If constructed with just one argument, then treat it as the key.
+around BUILDARGS => sub {
+ my ( $orig, $class ) = ( shift, shift );
+
+ if ( @_ == 1 && ! ref $_[0] ) {
+ return $class->$orig( key => $_[0] );
+ } else {
+ return $class->$orig( @_ );
+ };
+};
+
+sub _build_key {
+ my ( $s ) = @_;
+
+ open( my $fh, "<", "/etc/libpiny.key" ) or die "Can't open libpiny.key: $!";
+
+ my $key;
+
+ {
+ local $/;
+ $key = <$fh>;
+ };
+
+ close( $fh );
+
+ return $key;
+};
+
+# Moose boilerplate
+
+__PACKAGE__->meta->make_immutable;
+
+1;