1 package Text::Tradition::UserStore;
7 use KiokuX::User::Util qw(crypt_password);
9 extends 'KiokuX::Model';
11 use Text::Tradition::User;
12 # use Text::Tradition::Directory;
14 has MIN_PASS_LEN => ( is => 'ro', isa => 'Num', default => sub { 8 } );
16 # has 'directory' => (
18 # isa => 'KiokuX::Model',
22 ## TODO: Some of these methods should probably optionally take $user objects
23 ## instead of hashrefs.
25 ## It also occurs to me that all these methods don't need to be named
26 ## XX_user, but leaving that way for now incase we merge this code
27 ## into ::Directory for one-store.
29 ## To die or not to die, on error, this is the question.
31 my ($self, $userinfo) = @_;
32 my $username = $userinfo->{username};
33 my $password = $userinfo->{password};
35 return unless $username && $self->validate_password($password);
37 my $user = Text::Tradition::User->new(
39 password => crypt_password($password),
42 my $scope = $self->new_scope;
43 $self->store($user->kiokudb_object_id, $user);
49 my ($self, $userinfo) = @_;
50 my $username = $userinfo->{username};
52 my $scope = $self->new_scope;
53 return $self->lookup(Text::Tradition::User->id_for_user($username));
58 my ($self, $userinfo) = @_;
59 my $username = $userinfo->{username};
60 my $password = $userinfo->{password};
62 return unless $username && $self->validate_password($password);
64 my $user = $self->find_user({ username => $username });
67 my $scope = $self->new_scope;
68 $user->password(crypt_password($password));
76 my ($self, $userinfo) = @_;
77 my $username = $userinfo->{username};
81 my $user = $self->find_user({ username => $username });
85 foreach my $tradition (@{ $user->traditions }) {
86 ## Not implemented yet
87 # $tradition->public(0);
89 my $scope = $self->new_scope;
91 ## Should we be using Text::Tradition::Directory also?
92 $self->update(@{ $user->traditions });
100 my ($self, $userinfo) = @_;
101 my $username = $userinfo->{username};
103 return if !$username;
105 my $user = $self->find_user({ username => $username });
108 return $user if $user->active;
111 my $scope = $self->new_scope;
112 $self->update($user);
118 my ($self, $userinfo) = @_;
119 my $username = $userinfo->{username};
121 return if !$username;
123 my $user = $self->find_user({ username => $username });
126 my $scope = $self->new_scope;
128 ## Should we be using Text::Tradition::Directory for this bit?
129 $self->delete( @{ $user->traditions });
132 $self->delete($user);
137 sub validate_password {
138 my ($self, $password) = @_;
140 return if !$password;
141 return if length($password) < $self->MIN_PASS_LEN;