diff --git a/Makefile.am b/Makefile.am index 498dcc6..83073a1 100644 --- a/Makefile.am +++ b/Makefile.am @@ -89,6 +89,14 @@ nobase_dist_pkgdata_DATA = \ templs/alias-rename-form.html.ep \ templs/alias-rename-handler.html.ep \ \ + templs/forward-list.html.ep \ + templs/forward-add-form.html.ep \ + templs/forward-add-handler.html.ep \ + templs/forward-update-form.html.ep \ + templs/forward-update-handler.html.ep \ + templs/forward-delete-form.html.ep \ + templs/forward-delete-handler.html.ep \ + \ templs/exception.development.html.ep \ templs/exception.production.html.ep \ templs/hello.html.ep \ diff --git a/Makefile.in b/Makefile.in index 8abfd0a..307f0ff 100644 --- a/Makefile.in +++ b/Makefile.in @@ -352,6 +352,14 @@ nobase_dist_pkgdata_DATA = \ templs/alias-rename-form.html.ep \ templs/alias-rename-handler.html.ep \ \ + templs/forward-list.html.ep \ + templs/forward-add-form.html.ep \ + templs/forward-add-handler.html.ep \ + templs/forward-update-form.html.ep \ + templs/forward-update-handler.html.ep \ + templs/forward-delete-form.html.ep \ + templs/forward-delete-handler.html.ep \ + \ templs/exception.development.html.ep \ templs/exception.production.html.ep \ templs/hello.html.ep \ diff --git a/maacom.pl b/maacom.pl index 91bfa9d..8bfca9c 100755 --- a/maacom.pl +++ b/maacom.pl @@ -328,6 +328,8 @@ sub domain_delete { $id; } +# --- ALAIS --- + sub alias_exist { my ($self, $name, $domain_id) = @_; return undef unless $name; @@ -522,6 +524,70 @@ sub user_delete { $id; } + +# --- FORWARD --- + +sub forward_exist { + my ($self, $name) = @_; + return undef unless $name; + my $res = $self->db->exec1("select id from forwards where name = '$name' order by id limit 1"); + $res->{id}; +} + +sub forward_profile { + my ($self, $id) = @_; + return undef unless $id; + my $row = $self->db->exec1("select * from forwards where forwards.id = $id limit 1"); + $row; +} + +sub forward_nextid { + my $self = shift; + my $res = $self->db->exec1("select id from forwards order by id desc limit 1"); + my $id = $res->{id} || 0; + $id += 1; +} + +sub forward_add { + my ($self, $name) = @_; + return undef unless $name; + return undef if $self->forward_exist($name); + my $next_id = $self->forward_nextid; + $self->db->do("insert into forwards (id, name) values ($next_id, '$name')"); + $self->forward_exist($name); +} + +sub forward_list { + my $self = shift; + $self->db->exec("select * from forwards order by id"); +} + +sub forward_update { + my ($self, $id, %args) = @_; + return undef unless $id; + my $prof = $self->forward_profile($id); + return undef unless $prof; + + my $name = $args{name} || $prof->{name}; + + $self->db->do("update forwards set name = '$name' where id = $id"); + my $res = $self->forward_profile($id); + return undef unless $res->{name} eq $name; + $id; +} + + +sub forward_delete { + my ($self, $id) = @_; + return undef unless $id; +# return $id unless $self->forward_profile($id); + $self->db->do("delete from forwards where id = $id"); + return undef if $self->forward_profile($id); + $id; +} + + + 1; #-------------- @@ -819,6 +885,42 @@ sub mxlog { $self->render(template => 'mxlog'); } +# --- FORWARD --- + +sub forward_list { + my $self = shift; + $self->render(template => 'forward-list'); +} +sub forward_add_form { + my $self = shift; + $self->render(template => 'forward-add-form'); +} +sub forward_add_handler { + my $self = shift; + $self->render(template => 'forward-add-handler'); +} +sub forward_update_form { + my $self = shift; + $self->render(template => 'forward-update-form'); +} + +sub forward_update_handler { + my $self = shift; + $self->render(template => 'forward-update-handler'); +} + +sub forward_delete_form { + my $self = shift; + $self->render(template => 'forward-delete-form'); +} + +sub forward_delete_handler { + my $self = shift; + $self->render(template => 'forward-delete-handler'); +} + + + 1; #----------- @@ -971,6 +1073,14 @@ $r->any('/alias/rename/handler')->over('auth')->to('controller#alias_rename_hand $r->any('/mxlog')->over('auth')->to('controller#mxlog' ); +$r->any('/forward/list')->over('auth')->to('controller#forward_list' ); +$r->any('/forward/add/form')->over('auth')->to('controller#forward_add_form' ); +$r->any('/forward/add/handler')->over('auth')->to('controller#forward_add_handler' ); +$r->any('/forward/update/form')->over('auth')->to('controller#forward_update_form' ); +$r->any('/forward/update/handler')->over('auth')->to('controller#forward_update_handler' ); +$r->any('/forward/delete/form')->over('auth')->to('controller#forward_delete_form' ); +$r->any('/forward/delete/handler')->over('auth')->to('controller#forward_delete_handler' ); + #---------------- #--- LISTENER --- diff --git a/schema.sql b/schema.sql index 9c9476c..134f56d 100644 --- a/schema.sql +++ b/schema.sql @@ -20,4 +20,9 @@ CREATE TABLE aliases ( domain_id int, list text ); +CREATE TABLE forwards ( + id int unique NOT NULL PRIMARY KEY, + name text unique +); + COMMIT; diff --git a/templs/forward-add-form.html.ep b/templs/forward-add-form.html.ep new file mode 100644 index 0000000..2612be8 --- /dev/null +++ b/templs/forward-add-form.html.ep @@ -0,0 +1,30 @@ +%# +%# $Id$ +%# +% layout 'default'; +% title 'Maacom'; + +% use Mojo::Util qw(dumper); + +% my $u = $c->app->user; + +