Initial admin_users script, with more tests and additions to userstore for modifying...
[scpubgit/stemmatology.git] / lib / Text / Tradition / UserStore.pm
1 package Text::Tradition::UserStore;
2
3 use strict;
4 use warnings;
5
6 use Moose;
7 use KiokuX::User::Util qw(crypt_password);
8
9 extends 'KiokuX::Model';
10
11 use Text::Tradition::User;
12
13 has MIN_PASS_LEN => ( is => 'ro', isa => 'Num', default => sub { 8 } );
14
15 # has 'directory' => ( 
16 #     is => 'rw', 
17 #     isa => 'KiokuX::Model',
18 #     handles => []
19 #     );
20
21 ## To die or not to die, on error, this is the question.
22 sub add_user {
23     my ($self, $userinfo) = @_;
24     my $username = $userinfo->{username};
25     my $password = $userinfo->{password};
26
27     return unless $username && $self->validate_password($password);
28
29     my $user = Text::Tradition::User->new(
30         id => $username,
31         password => crypt_password($password),
32     );
33
34     my $scope = $self->new_scope;
35     $self->store($user->kiokudb_object_id, $user);
36
37     return $user;
38 }
39
40 sub find_user {
41     my ($self, $userinfo) = @_;
42     my $username = $userinfo->{username};
43
44     return $self->lookup(Text::Tradition::User->id_for_user($username));
45     
46 }
47
48 sub modify_user {
49     my ($self, $userinfo) = @_;
50     my $username = $userinfo->{username};
51     my $password = $userinfo->{password};
52
53     return unless $username && $self->validate_password($password);
54
55     my $user = $self->find_user({ username => $username });
56     return unless $user;
57
58     my $scope = $self->new_scope;
59     $user->password(crypt_password($password));
60
61     $self->update($user);
62
63     return $user;
64 }
65
66 sub delete_user {
67 }
68
69
70 sub validate_password {
71     my ($self, $password) = @_;
72
73     return if !$password;
74     return if length($password) < $self->MIN_PASS_LEN;
75
76     return 1;
77 }
78
79 1;