Base.pm 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. package Trog::Authz::Base;
  2. use strict;
  3. use warnings;
  4. no warnings 'experimental';
  5. use feature qw{signatures state};
  6. use constant 'required_params' => [];
  7. sub new ($class, $params) {
  8. return 0 if grep { !$params->{$_} } @{$class->required_params()};
  9. my $self = bless { 'params' => $params }, $class;
  10. return $self->do_auth();
  11. }
  12. sub do_auth {
  13. die "Implemented in subclass";
  14. }
  15. sub failed ($self, $failed = $self->{'failed'} ) {
  16. $self->{'failed'} = $failed if defined($failed);
  17. $self->{'failed'} //= -1;
  18. return $self->{'failed'};
  19. }
  20. sub headers ($self, @headers) {
  21. $self->{'headers'} = \@headers if @headers;
  22. return @{$self->{'headers'}};
  23. }
  24. sub handle_cookie ($self, $cookie) {
  25. if ($cookie) {
  26. # TODO secure / sameSite cookie to kill csrf, maybe do rememberme with Expires=~0
  27. my $secure = '';
  28. $secure = '; Secure' if $self->{'params'}->{scheme} eq 'https';
  29. $self->headers(
  30. "Set-Cookie" => "tcmslogin=$cookie; HttpOnly; SameSite=Strict$secure",
  31. );
  32. $self->failed(0);
  33. }
  34. return;
  35. }
  36. 1;