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; + +
+
+
+ +
+
Add forwarded domain
+ +
+ + Escape +
+
+ +
+
+
+%#EOF diff --git a/templs/forward-add-handler.html.ep b/templs/forward-add-handler.html.ep new file mode 100644 index 0000000..7ed9054 --- /dev/null +++ b/templs/forward-add-handler.html.ep @@ -0,0 +1,32 @@ +%# +%# $Id$ +%# +% layout 'default'; +% title 'Maacom'; + +% use Mojo::Util qw(dumper); + +% my $u = $c->app->user; +% my $name = $c->req->param('forward_name'); +% my $id = $u->forward_exist($name); + +% if ($id) { +
Domain <%= $name %> already exists
+% } + +% unless ($id) { + % my $res = $u->forward_add($name); + % if ($res) { +
Domain <%= $name %> has been added.
+ % } + + % unless ($res) { +
Domain <%= $name %> was not added.
+ % } +% } + +%#EOF + + + + diff --git a/templs/forward-delete-form.html.ep b/templs/forward-delete-form.html.ep new file mode 100644 index 0000000..32256cb --- /dev/null +++ b/templs/forward-delete-form.html.ep @@ -0,0 +1,39 @@ +%# +%# $Id$ +%# +% layout 'default'; +% title 'Maacom'; + +% use Mojo::Util qw(dumper); + +% my $u = $c->app->user; + +% my $forward_id = $c->req->param('forward_id') || 0; +% my $profile = $u->forward_profile($forward_id); + +% if ($profile) { + % my $forward_name = $profile->{name}; + +
+
+
+ +
+
Delete domain <%= $forward_name %>
+ +
+ + Escape +
+
+ +
+
+
+% } + +% unless ($profile) { +
Domain with id <%= $forward_id %> not exist
+% } + +%#EOF diff --git a/templs/forward-delete-handler.html.ep b/templs/forward-delete-handler.html.ep new file mode 100644 index 0000000..1b21144 --- /dev/null +++ b/templs/forward-delete-handler.html.ep @@ -0,0 +1,32 @@ +%# +%# $Id$ +%# +% layout 'default'; +% title 'Maacom'; + +% use Mojo::Util qw(dumper); + +% my $u = $c->app->user; + +% my $forward_id = $c->req->param('forward_id') || 0; +% my $profile = $u->forward_profile($forward_id); + +% if ($profile) { + % my $name = $profile->{name}; + % my $res = $u->forward_delete($forward_id); + + % if ($res) { +
Domain <%= $name %> has been deleted
+ % } + + % unless ($res) { +
Domain <%= $name %> was not deleted
+ % } +% } + +% unless ($profile) { +
Domain with id <%= $forward_id %> not exist
+% } + +%#EOF + diff --git a/templs/forward-list.html.ep b/templs/forward-list.html.ep new file mode 100644 index 0000000..31c378c --- /dev/null +++ b/templs/forward-list.html.ep @@ -0,0 +1,74 @@ +%# +%# $Id$ +%# +% layout 'default'; +% title 'Maacom'; + +% use Mojo::Util qw(dumper); + +% my $u = $c->app->user; + +
+ Domains + + + +
+ + +% my $list = $u->forward_list; + +% unless ($list) { +
+ Cannot list domains. May be wrong database? +
+% } + + + + + + + + + + + +% my $n = 0; + +% if ($list) { + % foreach my $row (@$list) { + % $n += 1; + % my $id = $row->{id}; + % my $name = $row->{name}; + % my $size = $row->{size}; + + + + + + + % } +% } + +
#domain
<%= $n %><%= $name %>
+ + + +%# EOF diff --git a/templs/forward-update-form.html.ep b/templs/forward-update-form.html.ep new file mode 100644 index 0000000..9534f44 --- /dev/null +++ b/templs/forward-update-form.html.ep @@ -0,0 +1,44 @@ +%# +%# $Id$ +%# +% layout 'default'; +% title 'Maacom'; + +% use Mojo::Util qw(dumper); + +% my $u = $c->app->user; + +% my $forward_id = $c->req->param('forward_id') || 0; +% my $profile = $u->forward_profile($forward_id); + +% if ($profile) { + % my $forward_name = $profile->{name}; + +
+
+
+ +
+
Edit domain
+ + +
+ + Escape +
+
+ +
+
+
+% } + +% unless ($profile) { +
Domain with id <%= $forward_id %> not exist
+% } + + +%#EOF diff --git a/templs/forward-update-handler.html.ep b/templs/forward-update-handler.html.ep new file mode 100644 index 0000000..3eba72a --- /dev/null +++ b/templs/forward-update-handler.html.ep @@ -0,0 +1,41 @@ +%# +%# $Id$ +%# +% layout 'default'; +% title 'Maacom'; + +% use Mojo::Util qw(dumper); + +% my $u = $c->app->user; + +% my $name = $c->req->param('forward_name'); +% my $forward_id = $c->req->param('forward_id') || 0; +% my $profile = $u->forward_profile($forward_id); + +% if ($profile) { + % my $cid = $u->forward_exist($name); + % if ($cid) { +
Domain <%= $name %> already exists
+ % } + + % unless ($cid) { + % my $res = $u->forward_update($forward_id, name => $name); + % if ($res) { +
Domain <%= $name %> has been updated.
+ % } + + % unless ($res) { +
Domain <%= $name %> was not updated.
+ % } + % } +% } + +% unless ($profile) { +
Domain with id <%= $forward_id %> not exist
+% } + +%#EOF + + + + diff --git a/templs/layouts/default.html.ep b/templs/layouts/default.html.ep index 7a6848a..a5897bf 100644 --- a/templs/layouts/default.html.ep +++ b/templs/layouts/default.html.ep @@ -31,6 +31,7 @@
  • Domain
  • User
  • Alias
  • +
  • Forward
  • Log