From e003183ce3e37e8da028db9e6e346ee70ccfed53 Mon Sep 17 00:00:00 2001 From: Adrian Salceanu Date: Sat, 23 Apr 2022 17:29:17 +0200 Subject: [PATCH 1/3] Genie 5 support --- Project.toml | 8 +++- .../AuthenticationController.jl | 12 ++++-- files/plugins/genie_authentication.jl | 2 - src/GenieAuthentication.jl | 43 ++++++++++--------- 4 files changed, 36 insertions(+), 29 deletions(-) diff --git a/Project.toml b/Project.toml index 5b5deb8..36b4cba 100644 --- a/Project.toml +++ b/Project.toml @@ -1,14 +1,18 @@ name = "GenieAuthentication" uuid = "e115e502-7e3a-11e9-29b2-aba8be6c6778" authors = ["Adrian Salceanu "] -version = "1.1" +version = "2.0.0" [deps] Genie = "c43c736e-a2d1-11e8-161f-af95117fbd1e" +GenieSession = "03cc5b98-4f21-4eb6-99f2-22eced81f962" +GenieSessionFileSession = "5c4fdc26-39e3-47cf-9034-e533e09961c2" SHA = "ea8e919c-243c-51af-8825-aaa63cd721ce" SearchLight = "340e8cb6-72eb-11e8-37ce-c97ebeb32050" [compat] -Genie = "3, 4" +Genie = "5" +GenieSession = "0.1" +GenieSessionFileSession = "0.1" SearchLight = "1, 2" julia = "1.6" diff --git a/files/app/resources/authentication/AuthenticationController.jl b/files/app/resources/authentication/AuthenticationController.jl index 68a98a4..cb26414 100644 --- a/files/app/resources/authentication/AuthenticationController.jl +++ b/files/app/resources/authentication/AuthenticationController.jl @@ -1,12 +1,16 @@ module AuthenticationController -using Genie, Genie.Renderer, Genie.Renderer.Html, Genie.Flash +using Genie, Genie.Renderer, Genie.Renderer.Html using SearchLight using GenieAuthentication using ViewHelper using Users using Logging +using GenieSession +using GenieSession.Flash +using GenieSessionFileSession + function show_login() html(:authentication, :login, context = @__MODULE__) @@ -15,7 +19,7 @@ end function login() try user = findone(User, username = params(:username), password = Users.hash_password(params(:password))) - authenticate(user.id, Genie.Sessions.session(params())) + authenticate(user.id, GenieSession.session(params())) redirect(:success) catch ex @@ -30,7 +34,7 @@ function success() end function logout() - deauthenticate(Genie.Sessions.session(params())) + deauthenticate(GenieSession.session(params())) flash("Good bye! ") @@ -48,7 +52,7 @@ function register() name = params(:name), email = params(:email)) |> save! - authenticate(user.id, Genie.Sessions.session(params())) + authenticate(user.id, GenieSession.session(params())) "Registration successful" catch ex diff --git a/files/plugins/genie_authentication.jl b/files/plugins/genie_authentication.jl index 0b3898c..1d3daa2 100644 --- a/files/plugins/genie_authentication.jl +++ b/files/plugins/genie_authentication.jl @@ -1,7 +1,5 @@ using Genie -Genie.Sessions.init() - import AuthenticationController import SearchLight: findone import Users diff --git a/src/GenieAuthentication.jl b/src/GenieAuthentication.jl index cf7b3d6..4c60b8e 100644 --- a/src/GenieAuthentication.jl +++ b/src/GenieAuthentication.jl @@ -4,6 +4,7 @@ Functionality for authenticating Genie users. module GenieAuthentication import Genie, SearchLight +import GenieSession, GenieSessionFileSession export authenticate, deauthenticate, is_authenticated, get_authentication, authenticated export login, logout, with_authentication, without_authentication, @authenticated! @@ -14,27 +15,27 @@ const USER_ID_KEY = :__auth_user_id """ Stores the user id on the session. """ -function authenticate(user_id::Any, session::Genie.Sessions.Session) :: Genie.Sessions.Session - Genie.Sessions.set!(session, USER_ID_KEY, user_id) +function authenticate(user_id::Any, session::GenieSession.Session) :: GenieSession.Session + GenieSession.set!(session, USER_ID_KEY, user_id) end -function authenticate(user_id::SearchLight.DbId, session::Genie.Sessions.Session) +function authenticate(user_id::SearchLight.DbId, session::GenieSession.Session) authenticate(Int(user_id.value), session) end -function authenticate(user_id::Union{String,Symbol,Int,SearchLight.DbId}, params::Dict{Symbol,Any} = Genie.Requests.payload()) :: Genie.Sessions.Session +function authenticate(user_id::Union{String,Symbol,Int,SearchLight.DbId}, params::Dict{Symbol,Any} = Genie.Requests.payload()) :: GenieSession.Session authenticate(user_id, params[:SESSION]) end """ - deauthenticate(session) :: Sessions.Session - deauthenticate(params::Dict{Symbol,Any}) :: Sessions.Session + deauthenticate(session) + deauthenticate(params::Dict{Symbol,Any}) Removes the user id from the session. """ -function deauthenticate(session::Genie.Sessions.Session) :: Genie.Sessions.Session - Genie.Sessions.unset!(session, USER_ID_KEY) +function deauthenticate(session::GenieSession.Session) :: GenieSession.Session + GenieSession.unset!(session, USER_ID_KEY) end -function deauthenticate(params::Dict = Genie.Requests.payload()) :: Genie.Sessions.Session +function deauthenticate(params::Dict = Genie.Requests.payload()) :: GenieSession.Session deauthenticate(params[:SESSION]) end @@ -45,8 +46,8 @@ end Returns `true` if a user id is stored on the session. """ -function is_authenticated(session::Union{Genie.Sessions.Session,Nothing}) :: Bool - Genie.Sessions.isset(session, USER_ID_KEY) +function is_authenticated(session::Union{GenieSession.Session,Nothing}) :: Bool + GenieSession.isset(session, USER_ID_KEY) end function is_authenticated(params::Dict = Genie.Requests.payload()) :: Bool is_authenticated(params[:SESSION]) @@ -71,8 +72,8 @@ end Returns the user id stored on the session, if available. """ -function get_authentication(session::Genie.Sessions.Session) :: Union{Nothing,Any} - Genie.Sessions.get(session, USER_ID_KEY) +function get_authentication(session::GenieSession.Session) :: Union{Nothing,Any} + GenieSession.get(session, USER_ID_KEY) end function get_authentication(params::Dict = Genie.Requests.payload()) :: Union{Nothing,Any} get_authentication(params[:SESSION]) @@ -82,15 +83,15 @@ const authentication = get_authentication """ - login(user, session) :: Union{Nothing,Genie.Sessions.Session} - login(user, params::Dict{Symbol,Any}) :: Union{Nothing,Genie.Sessions.Session} + login(user, session) + login(user, params::Dict{Symbol,Any}) Persists on session the id of the user object and returns the session. """ -function login(user::M, session::Genie.Sessions.Session)::Union{Nothing,Genie.Sessions.Session} where {M<:SearchLight.AbstractModel} +function login(user::M, session::GenieSession.Session)::Union{Nothing,GenieSession.Session} where {M<:SearchLight.AbstractModel} authenticate(getfield(user, Symbol(pk(user))), session) end -function login(user::M, params::Dict = Genie.Requests.payload())::Union{Nothing,Genie.Sessions.Session} where {M<:SearchLight.AbstractModel} +function login(user::M, params::Dict = Genie.Requests.payload())::Union{Nothing,GenieSession.Session} where {M<:SearchLight.AbstractModel} login(user, params[:SESSION]) end @@ -101,10 +102,10 @@ end Deletes the id of the user object from the session, effectively logging the user off. """ -function logout(session::Genie.Sessions.Session) :: Genie.Sessions.Session +function logout(session::GenieSession.Session) :: GenieSession.Session deauthenticate(session) end -function logout(params::Dict = Genie.Requests.payload()) :: Genie.Sessions.Session +function logout(params::Dict = Genie.Requests.payload()) :: GenieSession.Session logout(params[:SESSION]) end @@ -115,7 +116,7 @@ end Invokes `f` only if a user is currently authenticated on the session, `fallback` is invoked otherwise. """ -function with_authentication(f::Function, fallback::Function, session::Union{Genie.Sessions.Session,Nothing}) +function with_authentication(f::Function, fallback::Function, session::Union{GenieSession.Session,Nothing}) if ! is_authenticated(session) fallback() else @@ -133,7 +134,7 @@ end Invokes `f` if there is no user authenticated on the current session. """ -function without_authentication(f::Function, session::Genie.Sessions.Session) +function without_authentication(f::Function, session::GenieSession.Session) ! is_authenticated(session) && f() end function without_authentication(f::Function, params::Dict = Genie.Requests.payload()) From 65da2440bbd681e4e52b099701b6c09a989d8a45 Mon Sep 17 00:00:00 2001 From: Adrian Salceanu Date: Mon, 25 Apr 2022 19:13:42 +0200 Subject: [PATCH 2/3] GeniePlugins support --- Project.toml | 2 ++ src/GenieAuthentication.jl | 3 ++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/Project.toml b/Project.toml index 36b4cba..d66e20a 100644 --- a/Project.toml +++ b/Project.toml @@ -5,6 +5,7 @@ version = "2.0.0" [deps] Genie = "c43c736e-a2d1-11e8-161f-af95117fbd1e" +GeniePlugins = "07906039-e6ad-44b0-b988-2f2de6a70eec" GenieSession = "03cc5b98-4f21-4eb6-99f2-22eced81f962" GenieSessionFileSession = "5c4fdc26-39e3-47cf-9034-e533e09961c2" SHA = "ea8e919c-243c-51af-8825-aaa63cd721ce" @@ -12,6 +13,7 @@ SearchLight = "340e8cb6-72eb-11e8-37ce-c97ebeb32050" [compat] Genie = "5" +GeniePlugins = "0.1" GenieSession = "0.1" GenieSessionFileSession = "0.1" SearchLight = "1, 2" diff --git a/src/GenieAuthentication.jl b/src/GenieAuthentication.jl index 4c60b8e..950e5e2 100644 --- a/src/GenieAuthentication.jl +++ b/src/GenieAuthentication.jl @@ -5,6 +5,7 @@ module GenieAuthentication import Genie, SearchLight import GenieSession, GenieSessionFileSession +import GeniePlugins export authenticate, deauthenticate, is_authenticated, get_authentication, authenticated export login, logout, with_authentication, without_authentication, @authenticated! @@ -161,7 +162,7 @@ function install(dest::String; force = false, debug = false) :: Nothing debug && "Installing from $(joinpath(src, f))" - Genie.Plugins.install(joinpath(src, f), dest, force = force) + GeniePlugins.install(joinpath(src, f), dest, force = force) end nothing From f84b877b75bdd9b39a75c4ca9eb79f2862010977 Mon Sep 17 00:00:00 2001 From: Adrian Salceanu Date: Wed, 20 Jul 2022 19:28:45 +0200 Subject: [PATCH 3/3] Genie.Plugins -> GeniePlugins --- src/GenieAuthentication.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/GenieAuthentication.jl b/src/GenieAuthentication.jl index 950e5e2..f9e60d5 100644 --- a/src/GenieAuthentication.jl +++ b/src/GenieAuthentication.jl @@ -149,7 +149,7 @@ end Copies the plugin's files into the host Genie application. """ function install(dest::String; force = false, debug = false) :: Nothing - src = abspath(normpath(joinpath(pathof(@__MODULE__) |> dirname, "..", Genie.Plugins.FILES_FOLDER))) + src = abspath(normpath(joinpath(pathof(@__MODULE__) |> dirname, "..", GeniePlugins.FILES_FOLDER))) debug && @info "Preparing to install from $src into $dest" debug && @info "Found these to install $(readdir(src))"