Skip to content
Snippets Groups Projects
Invite.pm 1.21 KiB
package SeMeet::Schema::Result::Invite;

use strict;
use warnings;

use base 'DBIx::Class::Core';
use Mojo::JWT;

use constant MEET_TOKEN_LIFETIME  => 3600 * 24;

our $VERSION = 1;

__PACKAGE__->table('invites');

__PACKAGE__->add_columns(
    id => {
        data_type         => 'integer',
        is_auto_increment => 1,
        is_nullable       => 0,
        sequence          => 'uid_seq'
    },
    qw(
        token
        created
        expire
        user_id
        meet_id
        email
        displayname
    ),
);

__PACKAGE__->set_primary_key('id');

__PACKAGE__->add_unique_constraint(
    'token' => [qw(token)]
);

sub meet_token {
    my $self = shift;
    my $meet = shift;
    my $cfg  = shift;

    return Mojo::JWT->new(
        secret => $cfg->{jitsi_secret},
        claims => {
            aud  => 'semeet',
            iss  => 'semeet',
            sub  => 'meet.pirati.cz',
            room => $meet->uuid,
            moderator => \0,
            exp  => time + MEET_TOKEN_LIFETIME,
            context => {
                user   => {
                    name   => $self->displayname . ' (HOST)',
                    email  => $self->email,
                }
            },
        }
    )->encode;
}

1;