summaryrefslogtreecommitdiff
path: root/usr/src/libpiny/lib/Piny/User.pm
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/libpiny/lib/Piny/User.pm')
-rw-r--r--usr/src/libpiny/lib/Piny/User.pm216
1 files changed, 0 insertions, 216 deletions
diff --git a/usr/src/libpiny/lib/Piny/User.pm b/usr/src/libpiny/lib/Piny/User.pm
deleted file mode 100644
index 20ef4f1..0000000
--- a/usr/src/libpiny/lib/Piny/User.pm
+++ /dev/null
@@ -1,216 +0,0 @@
-# Copyright © 2010 Julian Blake Kongslie <jblake@omgwallhack.org>
-# Licensed under the BSD 3-clause license.
-
-use strict;
-use warnings;
-
-package Piny::User;
-
-use Moose;
-use Moose::Util::TypeConstraints;
-use MooseX::StrictConstructor;
-
-use Piny::Email;
-use Piny::Group;
-
-# Types
-
-subtype 'Username'
- => as 'Str'
- => where { $_ =~ /^(?!(git|ikiwiki)-)[a-zA-Z][a-zA-Z0-9_.-]*$/ }
- => message { 'That username is not in the correct format for a piny user.' }
- ;
-
-# Attributes
-
-has 'uid' =>
- ( is => 'ro'
- , isa => 'Int'
- , lazy_build => 1
- );
-
-has 'name' =>
- ( is => 'ro'
- , isa => 'Username'
- , lazy_build => 1
- );
-
-has 'pwent' =>
- ( is => 'ro'
- , isa => 'ArrayRef'
- , lazy_build => 1
- , init_arg => undef
- );
-
-has 'password_hash' =>
- ( is => 'ro'
- , isa => 'Str'
- , lazy_build => 1
- , init_arg => undef
- );
-
-has 'email' =>
- ( is => 'ro'
- , isa => 'Piny::Email'
- , lazy_build => 1
- , init_arg => undef
- );
-
-has 'groups' =>
- ( is => 'ro'
- , isa => 'ArrayRef[Piny::Group]'
- , lazy_build => 1
- , init_arg => undef
- );
-
-# Public methods
-
-sub add_group {
- my ( $s, @groups ) = @_;
-
- foreach my $group ( @groups ) {
- $group->add_member( $s );
- };
-};
-
-sub remove_group {
- my ( $s, @groups ) = @_;
-
- foreach my $group ( @groups ) {
- $group->remove_member( $s );
- };
-};
-
-sub has_group {
- my ( $s, $group ) = @_;
-
- foreach my $owngroup ( @{$s->groups( )} ) {
- return 1 if $owngroup->gid( ) == $group->gid( );
- };
-
- return;
-};
-
-# Class methods
-
-sub all_users {
- my ( $class ) = @_;
-
- my @ret;
-
- endpwent( );
-
- while ( my @info = getpwent( ) ) {
- eval {
- my $user = $class->new( uid => $info[2] );
- # Some forced early evaluation, so error checking happens now.
- $user->name( );
- $user->email( );
- push( @ret, $user );
- };
- };
-
- endpwent( );
-
- return @ret;
-};
-
-# Builder methods
-
-# If constructed with just one argument, then
-# * If that argument is numeric, treat it as a UID.
-# * Otherwise, treat it as a username.
-around BUILDARGS => sub {
- my ( $orig, $class ) = ( shift, shift );
-
- if ( @_ == 1 && ! ref $_[0] ) {
- if ( $_[0] =~ m/^\d+$/ ) {
- return $class->$orig( uid => $_[0] );
- } else {
- return $class->$orig( name => $_[0] );
- };
- } else {
- return $class->$orig( @_ );
- };
-};
-
-sub BUILD {
- my ( $s ) = @_;
-
- if ( not ( $s->has_uid( ) or $s->has_name( ) ) ) {
- die "You must provide either UID or name!";
- };
-
- if ( $s->has_uid( ) and $s->has_name( ) ) {
- die "You must not provide both UID and name!";
- };
-};
-
-sub _build_uid {
- my ( $s ) = @_;
-
- return $s->pwent( )->[2];
-};
-
-sub _build_name {
- my ( $s ) = @_;
-
- return $s->pwent( )->[0];
-};
-
-sub _build_pwent {
- my ( $s ) = @_;
-
- if ( $s->has_uid( ) ) {
- my @res = getpwuid( $s->uid( ) );
- die "getpwuid( " . $s->uid( ) . " ) failed: $!" unless @res;
- return \@res;
- } elsif ( $s->has_name( ) ) {
- my @res = getpwnam( $s->name( ) );
- die "getpwnam( " . $s->name( ) . " ) failed: $!" unless @res;
- return \@res;
- } else {
- die "Not enough information provided to lookup user!";
- };
-};
-
-sub _build_password_hash {
- my ( $s ) = @_;
-
- return $s->pwent( )->[1];
-};
-
-sub _build_email {
- my ( $s ) = @_;
-
- return Piny::Email->new( address => $s->pwent( )->[6] );
-};
-
-sub _build_groups {
- my ( $s ) = @_;
-
- my @res;
- my @ent;
-
- endgrent( );
-
- while ( @ent = getgrent( ) ) {
- next if ( $ent[3] eq "" );
- foreach my $member ( split( / /, $ent[3] ) ) {
- if ( $member eq $s->name( ) ) {
- push @res, Piny::Group->new( gid => $ent[2] );
- last;
- };
- };
- };
-
- endgrent( );
-
- return \@res;
-};
-
-# Moose boilerplate
-
-__PACKAGE__->meta->make_immutable;
-
-1;