-- Deploy numerus:check_cookie to pg
-- requires: schema_auth
-- requires: user

begin;

set search_path to numerus, auth, public;

create or replace function check_cookie(input_cookie text) returns record as
$$
declare
	value record;
begin
	select email::text, role
	into value
	from "user"
	where email = split_part(input_cookie, '/', 2)
	  and cookie_expires_at > current_timestamp
	  and length(password) > 0
	  and cookie = split_part(input_cookie, '/', 1)
	;
	if value is null then
		select '', 'guest'::name into value;
	end if;
	return value;
end;
$$
language plpgsql
security definer
stable
set search_path = auth, numerus, pg_temp;

comment on function check_cookie(text) is
'Checks whether a given cookie is for a valid users, returning its email and role';

revoke execute on function check_cookie(text) from public;
grant execute on function check_cookie(text) to authenticator;

commit;
