Skip to content

Commit

Permalink
In Progress:
Browse files Browse the repository at this point in the history
User creation to Teiserver.CacheUser.register_user, Detect missing mailer

Moving user creation to Teiserver.CacheUser.register_user
If no mailer defined, unset the verification code

Added some guards
  • Loading branch information
jere0500 committed Jun 7, 2024
1 parent 66a5d98 commit e95d7a3
Show file tree
Hide file tree
Showing 2 changed files with 63 additions and 51 deletions.
29 changes: 20 additions & 9 deletions lib/teiserver/data/cache_user.ex
Original file line number Diff line number Diff line change
Expand Up @@ -263,14 +263,16 @@ defmodule Teiserver.CacheUser do

case Account.script_create_user(params) do
{:ok, user} ->
verification_code = (:rand.uniform(899_999) + 100_000) |> to_string

Account.update_user_stat(user.id, %{
"verification_code" => (:rand.uniform(899_999) + 100_000) |> to_string
"verification_code" => verification_code
})

# Now add them to the cache
user
|> convert_user
|> Map.put(:password_hash, spring_md5_password(password))
|> Map.put(:password_hash, encrypt_password(spring_md5_password(password)))
|> Map.put(:spring_password, false)
|> add_user
|> update_user(persist: true)
Expand All @@ -289,15 +291,24 @@ defmodule Teiserver.CacheUser do
:ok

true ->
case EmailHelper.new_user(user) do
{:error, error} ->
Logger.error("Error sending new user email - #{user.email} - #{error}")
case Application.fetch_env(:teiserver, Teiserver.Mailer) do
{:ok, _} ->
case EmailHelper.new_user(user) do
{:error, error} ->
Logger.error("Error sending new user email - #{user.email} - #{error}")

:no_verify ->
verify_user(get_user_by_id(user.id))

{:ok, _, _} ->
:ok
end

:no_verify ->
verify_user(get_user_by_id(user.id))
:error ->
# case, where no mailer is defined, skipping the verification
Account.delete_user_stat_keys(user.id, ~w(verification_code))

{:ok, _, _} ->
:ok
Logger.warn("Skipped sending mail, mailer is not defined")
end
end

Expand Down
85 changes: 43 additions & 42 deletions lib/teiserver_web/controllers/admin/user_controller.ex
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,8 @@ defmodule TeiserverWeb.Admin.UserController do
user: {Teiserver.Account.AuthLib, :current_user}
)

plug(:add_breadcrumb, name: 'Admin', url: '/teiserver/admin')
plug(:add_breadcrumb, name: 'Users', url: '/teiserver/admin/user')
plug(:add_breadcrumb, name: "Admin", url: "/teiserver/admin")
plug(:add_breadcrumb, name: "Users", url: "/teiserver/admin/user")

@spec index(Plug.Conn.t(), map) :: Plug.Conn.t()
def index(conn, params) do
Expand Down Expand Up @@ -216,42 +216,42 @@ defmodule TeiserverWeb.Admin.UserController do

@spec create_post(Plug.Conn.t(), map) :: Plug.Conn.t()
def create_post(conn, params \\ %{}) do
(params["name"] || "" == "")

passwordfn = fn -> if is_nil(params["password"]) or String.trim(params["password"]) == "" do "password" else params["password"] end end
emailfn = fn -> if is_nil(params["email"]) or String.trim(params["email"]) == "" do UUID.uuid1() else params["email"] end end


user_params = %{
"name" => params["name"],
"password" => passwordfn.(),
"email" => emailfn.(),
"permissions" => [],
"icon" => "fa-solid #{Teiserver.Helper.StylingHelper.random_icon()}",
"colour" => Teiserver.Helper.StylingHelper.random_colour(),
"trust_score" => 10_000,
"behaviour_score" => 10_000,
"data" => %{
"lobby_client" => "webui",
"rank" => 1,
"friends" => [],
"friend_requests" => [],
"ignored" => [],
"roles" => [],
"bot" => "false",
"moderator" => "false",
"password_hash" =>
Teiserver.CacheUser.encrypt_password(
Teiserver.CacheUser.spring_md5_password(passwordfn.())
)
}
}
if is_nil(params["name"]) or String.trim(params["name"]) == "" do
conn
|> put_flash(:danger, "Invalid user name")
|> redirect(to: ~p"/teiserver/admin/user")
end

case Account.create_user(user_params) do
{:ok, _user} ->
conn
|> put_flash(:info, "User created successfully.")
|> redirect(to: ~p"/teiserver/admin/user")
if allow?(conn, "Server") do
password =
if is_nil(params["password"]) or String.trim(params["password"]) == "" do
"password"
else
params["password"]
end

email =
if is_nil(params["email"]) or String.trim(params["email"]) == "" do
UUID.uuid1()
else
params["email"]
end

case Teiserver.CacheUser.register_user(params["name"], email, password) do
:success ->
conn
|> put_flash(:info, "User created successfully.")
|> redirect(to: ~p"/teiserver/admin/user")

{:failure, str} ->
conn
|> put_flash(:error, "Problem creating user: " <> str)
|> redirect(to: ~p"/teiserver/admin/user")
end
else
conn
|> put_flash(:danger, "No access.")
|> redirect(to: ~p"/teiserver/admin/user")
end
end

Expand Down Expand Up @@ -1160,11 +1160,12 @@ defmodule TeiserverWeb.Admin.UserController do

case Teiserver.Account.UserLib.has_access(user, conn) do
{true, _} ->
Teiserver.manually_delete_user(id)

conn
|> put_flash(:success, "User deleted")
|> redirect(to: ~p"/teiserver/admin/user/")
case Teiserver.Admin.DeleteUserTask.delete_users([id]) do
:ok ->
conn
|> put_flash(:success, "User deleted")
|> redirect(to: ~p"/teiserver/admin/user/")
end

_ ->
conn
Expand Down

0 comments on commit e95d7a3

Please sign in to comment.