60 lines
1.3 KiB
PL/PgSQL
60 lines
1.3 KiB
PL/PgSQL
drop function if exists "public"."hashed_text_string"(hashed hashed_text);
|
|
|
|
drop type "public"."email";
|
|
|
|
drop type "public"."hashed_text";
|
|
|
|
set check_function_bodies = off;
|
|
|
|
CREATE OR REPLACE FUNCTION public.email_of_string(val text)
|
|
RETURNS email
|
|
LANGUAGE sql
|
|
AS $function$select row(val);$function$
|
|
;
|
|
|
|
CREATE OR REPLACE FUNCTION public.email_to_string(val email)
|
|
RETURNS text
|
|
LANGUAGE sql
|
|
AS $function$select (val.str);$function$
|
|
;
|
|
|
|
CREATE OR REPLACE FUNCTION public.hashed_text_of_string(val text)
|
|
RETURNS hashed_text
|
|
LANGUAGE sql
|
|
AS $function$select row(val);$function$
|
|
;
|
|
|
|
CREATE OR REPLACE FUNCTION public.hashed_text_to_string(val hashed_text)
|
|
RETURNS text
|
|
LANGUAGE sql
|
|
AS $function$select (val.str);$function$
|
|
;
|
|
|
|
create type "public"."email" as ("str" text);
|
|
|
|
CREATE OR REPLACE FUNCTION public.hash_text(plain text)
|
|
RETURNS hashed_text
|
|
LANGUAGE plpgsql
|
|
IMMUTABLE
|
|
AS $function$
|
|
begin
|
|
return hashed_text_of_string(crypt(plain, gen_salt('bf')));
|
|
end;
|
|
$function$
|
|
;
|
|
|
|
create type "public"."hashed_text" as ("str" text);
|
|
|
|
CREATE OR REPLACE FUNCTION public.hashed_text_matches(plain text, hashed hashed_text)
|
|
RETURNS boolean
|
|
LANGUAGE plpgsql
|
|
IMMUTABLE
|
|
AS $function$
|
|
begin
|
|
return hashed_text_to_string(hashed) = crypt(plain, hashed_text_to_string(hashed));
|
|
end;
|
|
$function$
|
|
;
|
|
|
|
|