diff --git a/lib/frenzy/user.ex b/lib/frenzy/user.ex index 021b1b9..fb2aa5c 100644 --- a/lib/frenzy/user.ex +++ b/lib/frenzy/user.ex @@ -39,6 +39,13 @@ defmodule Frenzy.User do |> put_password_hash() end + def change_fever_password_changeset(user, attrs) do + user + |> cast(attrs, [:username, :fever_password]) + |> validate_length(:fever_password, min: 8) + |> put_fever_token() + end + defp put_password_hash( %Ecto.Changeset{valid?: true, changes: %{password: password}} = changeset ) do @@ -48,9 +55,12 @@ defmodule Frenzy.User do defp put_fever_token( %Ecto.Changeset{ valid?: true, - changes: %{username: username, fever_password: fever_password} + changes: %{fever_password: fever_password} } = changeset ) do + username = Map.get(changeset.changes, "username") || changeset.data.username + IO.inspect(username) + change(changeset, %{ fever_auth_token: :crypto.hash(:md5, "#{username}:#{fever_password}") |> Base.encode16(case: :lower) diff --git a/lib/frenzy_web/controllers/account_controller.ex b/lib/frenzy_web/controllers/account_controller.ex index 3a74d23..8cce1ab 100644 --- a/lib/frenzy_web/controllers/account_controller.ex +++ b/lib/frenzy_web/controllers/account_controller.ex @@ -56,4 +56,30 @@ defmodule FrenzyWeb.AccountController do def do_change_password(conn, _params) do redirect(conn, to: Routes.account_path(Endpoint, :change_password)) end + + def change_fever_password(conn, _params) do + render(conn, "change_fever_password.html") + end + + def do_change_fever_password(conn, %{ + "new_password" => new + }) do + user = conn.assigns[:user] |> Repo.preload([:approved_clients, :groups]) + + changeset = + User.change_fever_password_changeset(user, %{ + username: user.username, + fever_password: new + }) + + {:ok, user} = Repo.update(changeset) + + conn + |> put_flash(:info, "Fever password changed.") + |> redirect(to: Routes.account_path(Endpoint, :show)) + end + + def do_change_fever_password(conn, _params) do + redirect(conn, to: Routes.account_path(Endpoint, :change_fever_password)) + end end diff --git a/lib/frenzy_web/router.ex b/lib/frenzy_web/router.ex index 1a2b36d..cb46e7f 100644 --- a/lib/frenzy_web/router.ex +++ b/lib/frenzy_web/router.ex @@ -38,6 +38,8 @@ defmodule FrenzyWeb.Router do get "/account", AccountController, :show get "/account/change_password", AccountController, :change_password post "/account/change_password", AccountController, :do_change_password + get "/account/change_fever_password", AccountController, :change_fever_password + post "/account/change_fever_password", AccountController, :do_change_fever_password get "/", GroupController, :index resources "/groups", GroupController, except: [:edit, :update] diff --git a/lib/frenzy_web/templates/account/change_fever_password.html.eex b/lib/frenzy_web/templates/account/change_fever_password.html.eex new file mode 100644 index 0000000..bec5474 --- /dev/null +++ b/lib/frenzy_web/templates/account/change_fever_password.html.eex @@ -0,0 +1,11 @@ +

Change Fever Password

+ +<%= form_tag Routes.account_path(@conn, :do_change_fever_password), method: :post do %> +
+ + +
+
+ <%= submit "Change Fever Password" %> +
+<% end %> \ No newline at end of file diff --git a/lib/frenzy_web/templates/account/show.html.eex b/lib/frenzy_web/templates/account/show.html.eex index a72dba2..308a76b 100644 --- a/lib/frenzy_web/templates/account/show.html.eex +++ b/lib/frenzy_web/templates/account/show.html.eex @@ -1,4 +1,6 @@

User Settings

<%= @user.username %>

-Change Password \ No newline at end of file +Change Password + +Change Fever Password \ No newline at end of file