Guest User

Untitled

a guest
Dec 17th, 2017
385
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.96 KB | None | 0 0
  1. defmodule WarehouseWeb.UserController do
  2. use WarehouseWeb, :controller
  3.  
  4. alias Warehouse.Account
  5. alias Warehouse.Account.User
  6.  
  7. action_fallback WarehouseWeb.FallbackController
  8.  
  9. def index(conn, _params) do
  10. users = Account.list_users()
  11. render(conn, "index.json-api", data: users)
  12. end
  13. # ... ...
  14. end
  15.  
  16. defmodule WarehouseWeb.Router do
  17. use WarehouseWeb, :router
  18.  
  19. pipeline :api do
  20. plug :accepts, ["json", "json-api"]
  21. end
  22.  
  23. pipeline :api_auth do
  24. plug WarehouseWeb.Guardian.AuthPipeline
  25. end
  26.  
  27. scope "/api", WarehouseWeb do
  28. pipe_through :api
  29. post "/register", RegistrationController, :create
  30. post "/token", SessionController, :create, as: :login
  31. end
  32.  
  33. scope "/api", WarehouseWeb do
  34. pipe_through :api_auth
  35.  
  36. resources "/users", UserController, except: [:new, :edit]
  37. end
  38. end
  39.  
  40. defmodule WarehouseWeb.Guardian.AuthPipeline do
  41. use Guardian.Plug.Pipeline, otp_app: :warehouse,
  42. module: WarehouseWeb.Guardian,
  43. error_handler: WarehouseWeb.Guardian.AuthErrorHandler
  44.  
  45. plug Guardian.Plug.VerifyHeader
  46. plug Guardian.Plug.EnsureAuthenticated
  47. end
  48.  
  49. defmodule Warehouse.Guardian do
  50. use Guardian, otp: :warehouse,
  51. secret_key: "some secret"
  52.  
  53. def subject_for_token(resource, _claims) do
  54. {:ok, to_string(resource.id)}
  55. end
  56. def resource_from_claims(claims) do
  57. user = Warehouse.Account.get_user!(claims["sub"])
  58. {:ok, user}
  59. end
  60. end
  61.  
  62. defmodule WarehouseWeb.Guardian.AuthErrorHandler do
  63. import Plug.Conn
  64.  
  65. def auth_error(conn, {type, reason}, opts) do
  66. IO.inspect "authentication is not working!!"
  67. body = Poison.encode!(%{message: to_string(type)})
  68. send_resp(conn, 401, body)
  69. end
  70. end
  71.  
  72. defmodule WarehouseWeb.UserControllerTest do
  73. use WarehouseWeb.ConnCase
  74.  
  75. alias Warehouse.Account
  76. alias Warehouse.Account.User
  77.  
  78. @create_attrs %{email: "some email", firstname: "some firstname", lastname: "some lastname", password: "some password"}
  79. @update_attrs %{email: "some updated email", firstname: "some updated firstname", lastname: "some updated lastname", password: "some updated password"}
  80. @invalid_attrs %{email: nil, firstname: nil, lastname: nil, password: nil}
  81.  
  82. def fixture(:user) do
  83. {:ok, user} = Account.create_user(@create_attrs)
  84. user
  85. end
  86.  
  87. setup %{conn: conn} do
  88. # create user to be logged in
  89. {:ok, user} = Account.create_user(%{email: "gg@ex.com", real_password: "abc123", real_password_confirmation: "abc123"})
  90.  
  91. # create token for session
  92. {:ok, jwt, _claims} = Account.authenticate(%{user: user, password: "abc123"})
  93.  
  94. # add authorization header to the request
  95. conn = conn
  96. |> put_req_header("authorization", "Bearer: #{jwt}")
  97. |> put_req_header("accept", "application/json")
  98.  
  99. {:ok, %{conn: conn, user: user}}
  100. end
  101.  
  102. describe "index" do
  103. test "lists all users", %{conn: conn} do
  104. conn = get conn, user_path(conn, :index)
  105. assert json_response(conn, 200)["data"] == []
  106. end
  107. end
  108. end
Add Comment
Please, Sign In to add comment