Lemonldap-NG-Portal
view release on metacpan or search on metacpan
lib/Lemonldap/NG/Portal/Issuer/JitsiMeetTokens.pm view on Meta::CPAN
if ( !$self->jitsi_default_server ) {
$self->logger->error("Jitsi Server URL not set in configuration");
return PE_ERROR;
}
if ( !$self->jitsi_appid ) {
$self->logger->error("Jitsi Application ID not set in configuration");
return PE_ERROR;
}
if ( !$room ) {
$self->logger->error("Missing room parameter");
return PE_ERROR;
}
my $payload = {
iss => $self->p->buildUrl(),
room => $room,
exp => ( time + $self->jitsi_expiration ),
sub => '*',
aud => $self->jitsi_appid,
context => {
user => {
id => $req->userData->{ $self->jitsi_id_attribute },
(
$self->jitsi_name_attribute
? ( name => $req->userData->{ $self->jitsi_name_attribute }
)
: ()
),
(
$self->jitsi_mail_attribute
? ( email =>
$req->userData->{ $self->jitsi_mail_attribute } )
: ()
),
affiliation => "owner"
}
}
};
my $server;
my $u = URI->new_abs( $room, URI->new( $self->jitsi_default_server ) );
my @extra_headers;
my $key;
if ( $self->jitsi_signing_alg =~ /^HS/ ) {
if ( !$self->jitsi_appsecret ) {
$self->logger->error(
"Jitsi Application secret not set in configuration");
return PE_ERROR;
}
$key = $self->jitsi_appsecret;
}
else {
my ($key_id) = split( /\s*,\s*/, $self->conf->{jitsiSigningKey} );
if ( !$key_id ) {
$self->logger->error("jitsiSigningKey is not set");
return PE_ERROR;
}
my $pkey = $self->get_private_key($key_id);
if ( !$pkey ) {
$self->logger->error("Jitsi signing key $key_id was not found");
return PE_ERROR;
}
if ( !$pkey->{external_id} ) {
$self->logger->error(
"Jitsi signing key does not have an identified."
. " You must set oidcServiceKeyIdSig" );
return PE_ERROR;
}
@extra_headers = ( kid => $pkey->{external_id} );
my $private = $pkey->{private};
$key = \$private;
}
my $jwt = eval {
encode_jwt(
payload => to_json($payload),
alg => $self->jitsi_signing_alg,
key => $key,
extra_headers => { typ => "JWT", @extra_headers },
);
};
if ($@) {
$self->logger->error("Could not encode JWT: $@");
return $self->p->doPE( $req, PE_ERROR );
}
$u->query_form( jwt => $jwt );
$req->urldc( $u->as_string );
return PE_REDIRECT;
}
1;
( run in 1.018 second using v1.01-cache-2.11-cpan-800906f7e73 )