Default.pm 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. package Trog::Authz::Default;
  2. use strict;
  3. use warnings;
  4. no warnings 'experimental';
  5. use feature qw{signatures state};
  6. use parent 'Trog::Authz::Base';
  7. use File::Touch ();
  8. use Trog::Auth ();
  9. use Trog::Data ();
  10. use constant 'required_params' => [ 'username', 'password' ];
  11. sub do_auth ($self) {
  12. if (!$self->{'hasusers'}) {
  13. # Make the first user
  14. Trog::Auth::useradd( $self->{'params'}{username}, $self->{'params'}{password}, ['admin'] );
  15. # Add a stub user page and the initial series.
  16. _setup_initial_db($self->{'params'}{username});
  17. # Ensure we stop registering new users
  18. File::Touch::touch("config/has_users");
  19. }
  20. $self->failed(1);
  21. my @acls = Trog::Auth::acls4user($self->{'params'}{'username'});
  22. return $self if !@acls; # A user without ACLs can't really do anything, so why login?
  23. return if grep { $_ eq 'extAuthUser' } @acls; # Return if ext auth user yet on this path (shenanigans)
  24. my $cookie = Trog::Auth::mksession( $self->{'params'}{username}, $self->{'params'}{password} );
  25. $self->handle_cookie($cookie);
  26. return $self;
  27. }
  28. sub _setup_initial_db ($user) {
  29. my $dat = Trog::Data->new(Trog::Config::get());
  30. $dat->add(
  31. {
  32. "aclname" => "series",
  33. "acls" => [],
  34. "callback" => "Trog::Routes::HTML::series",
  35. method => 'GET',
  36. "data" => "Series",
  37. "href" => "/series",
  38. "local_href" => "/series",
  39. "preview" => "/img/sys/testpattern.jpg",
  40. "tags" => [qw{series topbar}],
  41. visibility => 'public',
  42. "title" => "Series",
  43. user => $user,
  44. form => 'series.tx',
  45. child_form => 'series.tx',
  46. aliases => [],
  47. },
  48. {
  49. "aclname" => "about",
  50. "acls" => [],
  51. "callback" => "Trog::Routes::HTML::series",
  52. method => 'GET',
  53. "data" => "About",
  54. "href" => "/about",
  55. "local_href" => "/about",
  56. "preview" => "/img/sys/testpattern.jpg",
  57. "tags" => [qw{series topbar public}],
  58. visibility => 'public',
  59. "title" => "About",
  60. user => $user,
  61. form => 'series.tx',
  62. child_form => 'profile.tx',
  63. aliases => [],
  64. },
  65. {
  66. "aclname" => "config",
  67. acls => [],
  68. "callback" => "Trog::Routes::HTML::config",
  69. 'method' => 'GET',
  70. "content_type" => "text/html",
  71. "data" => "Config",
  72. "href" => "/config",
  73. "local_href" => "/config",
  74. "preview" => "/img/sys/testpattern.jpg",
  75. "tags" => [qw{admin}],
  76. visibility => 'private',
  77. "title" => "Configure tCMS",
  78. user => $user,
  79. aliases => [],
  80. },
  81. {
  82. title => $user,
  83. data => 'Default user',
  84. preview => '/img/avatar/humm.gif',
  85. wallpaper => '/img/sys/testpattern.jpg',
  86. tags => ['about'],
  87. visibility => 'public',
  88. acls => ['admin'],
  89. local_href => "/users/$user",
  90. callback => "Trog::Routes::HTML::users",
  91. method => 'GET',
  92. user => $user,
  93. form => 'profile.tx',
  94. aliases => [],
  95. },
  96. );
  97. return;
  98. }
  99. 1;