From 38d8e297343ea8176d1997e3d856a05276a53f90 Mon Sep 17 00:00:00 2001 From: absc Date: Thu, 15 Aug 2024 21:20:38 +0000 Subject: [PATCH] Abstract setting the cookie for the client request. --- dudeswave/src/dudeswave_auth.erl | 50 +++++++++++++++++++++++- dudeswave/src/dudeswave_auth_handler.erl | 6 +-- 2 files changed, 49 insertions(+), 7 deletions(-) diff --git a/dudeswave/src/dudeswave_auth.erl b/dudeswave/src/dudeswave_auth.erl index 4bfe8db..aa98368 100644 --- a/dudeswave/src/dudeswave_auth.erl +++ b/dudeswave/src/dudeswave_auth.erl @@ -25,7 +25,8 @@ from the dudeswave database. -include_lib("storage/include/storage.hrl"). -export([authenticate/2, details/1, new/3, - update/4, delete/1, logout/2, auth_cookies/1, invalidate_cookies/1]). + update/4, delete/1, logout/2, auth_cookies/1, invalidate_cookies/1, + set_auth_cookies/4]). -doc """ Verify a session with an existing cookie. @@ -266,6 +267,20 @@ auth_cookies(Req) -> {User, Cookie}. +-doc """ +Invalidate the cookies in the passed request. + +Spec: + +``` +-spec invalidate_cookies(Req) -> Req0 when + Req :: cowboy_req:req(), + Req0 :: cowboy_req:req(). +``` + +A new request `Req0` is returned to the caller with the cookies zeroed and +completely invalidated. +""". -spec invalidate_cookies(Req) -> Req0 when Req :: cowboy_req:req(), Req0 :: cowboy_req:req(). @@ -276,4 +291,35 @@ invalidate_cookies(Req) -> Req1 = cowboy_req:set_resp_cookie(<<"dudename">>, <<"">>, Req0, #{max_age => 0}), - Req1. \ No newline at end of file + Req1. + +-doc """ +Set the authentication cookies for the provided clien request + +Spec: + +``` +-spec set_auth_cookies(Req, User, Cookie, Validity) -> Req0 when + Req :: cowboy_req:req(), + User :: binary(), + Cookie :: binary(), + Validity :: pos_integer(), + Req0 :: cowboy_req:req(). +``` + +A new request object `Req0`is returned, with the user and auth cookies set. +""". +-spec set_auth_cookies(Req, User, Cookie, Validity) -> Req0 when + Req :: cowboy_req:req(), + User :: binary(), + Cookie :: binary(), + Validity :: pos_integer(), + Req0 :: cowboy_req:req(). + +set_auth_cookies(Req, User, Cookie, Validity) -> + Req0 = cowboy_req:set_resp_cookie(<<"dudeauth">>, Cookie, Req, + #{max_age => Validity}), + Req1 = cowboy_req:set_resp_cookie(<<"dudename">>, User, Req0, + #{max_age => Validity}), + + Req1. diff --git a/dudeswave/src/dudeswave_auth_handler.erl b/dudeswave/src/dudeswave_auth_handler.erl index 063575e..aea36e2 100644 --- a/dudeswave/src/dudeswave_auth_handler.erl +++ b/dudeswave/src/dudeswave_auth_handler.erl @@ -156,11 +156,7 @@ login(Req, State) -> case dudeswave_auth:authenticate(User, {password, Pass}) of {true, Cookie, Validity} -> - Req1 = cowboy_req:set_resp_cookie(<<"dudeauth">>, Cookie, Req0, - #{max_age => Validity}), - Req2 = cowboy_req:set_resp_cookie(<<"dudename">>, User, Req1, - #{max_age => Validity}), - {true, Req2, State}; + {true, dudeswave_auth:set_auth_cookies(Req, User, Cookie, Validity), State}; false -> {false, Req0, State}; {error, _} ->