Default.pm 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738
  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 constant 'required_params' => [ 'username', 'password' ];
  8. sub do_auth ($self) {
  9. if (!$self->{'hasusers'}) {
  10. # Make the first user
  11. Trog::Auth::useradd($self->{'params'}->{username}, $self->{'params'}->{password}, ['admin'] );
  12. # Add a stub user page and the initial series.
  13. my $dat = Trog::Data->new($conf);
  14. _setup_initial_db($dat,$self->{'params'}->{username});
  15. # Ensure we stop registering new users
  16. File::Touch::touch("config/has_users");
  17. }
  18. $self->{failed} = 1;
  19. my $cookie = Trog::Auth::mksession( 'Default', $self->{'params'}->{username}, $self->{'params'}->{password});
  20. if ($cookie) {
  21. # TODO secure / sameSite cookie to kill csrf, maybe do rememberme with Expires=~0
  22. my $secure = '';
  23. $secure = '; Secure' if $self->{'params'}->{scheme} eq 'https';
  24. @headers = (
  25. "Set-Cookie" => "tcmslogin=$cookie; HttpOnly; SameSite=Strict$secure",
  26. );
  27. $self->{failed} = 0;
  28. }
  29. return $self;
  30. }
  31. 1;