package AppUser::User::Token;

use strict;
use warnings;
use Digest::MD5 qw(md5_hex);

use lib '/app/tools/common/lib';
use Common::Assert;

use constant kTokenExpireSeconds => 604800;    # one week

sub new {
    my ( $class, %args ) = @_;
    assert( $args{email} );

    my $self = bless {}, $class;

    $self->{_email} = $args{email};
    $self->{_token} = undef;

    return $self;
}

sub IsValidToken {
    my ( $self, $token2 ) = @_;

    my $myToken = $self->GetToken();
    if ( $token2 && $token2 =~ /^($myToken)(.+)$/ ) {
        my $timeSet = $2;
        if ( $timeSet + kTokenExpireSeconds > time() ) {
            return 1;
        } else {
            return undef;
        }
    } else {
        return undef;
    }
}

sub GetToken {
    my $self = shift;

    if ( !defined $self->{_token} ) {
        $self->{_token} = md5_hex( $self->{_email}, "h4ppYc0lOr3dMar81e5" );
    }

    return $self->{_token};
}

sub GetTimedToken {
    my $self = shift;
    return $self->GetToken() . time();
}

1;

