ServerUtils
This project has several module utils to handle common tasks in a server, like authorization params parsing.
Features:
- Phoenix plug to validate a JWT header
Pagination parsing:
- Cursor pagination
- Classic pagination
- Simple integer parsing
- JWT claims parser
- Logger wrapper with Sentry integration
Installation
Add to dependencies
def deps do
[{:server_utils, "~> 0.2.0"}]
end
mix deps.get
Configuration
Pagination
Configure default pagination params:
- Classic pagination
config :server_utils,
page_size_key: "page_size",
page_number_key: "page_number",
max_page_size: 25,
page_size: 10,
page_number: 1
- Cursor pagination
config :server_utils,
cursor_key: "cursor",
number_of_items_key: "number_of_items",
default_cursor: "",
default_number_of_items: 25,
max_number_of_items: 50
Usage
Check the documentation for the different available plugs.
Pagination
Set the plug in your router file to use it in a pipeline:
pipeline :paginated do
plug(ServerUtils.Plugs.Pagination.Cursor.PageRequest)
end
scope "/" do
pipe_through([:paginated])
get("/stuff", MyApp.StuffController, :get_stuff)
end
Depending on the plug used, either a cursor or classic PageRequest.t()
struct will be inject in the connection:
defmodule MyApp.StuffController do
use MyApp, :controller
def get_stuff(conn, params) do
cursor_page_request = conn.private[:server_utils][:page_request]
# Some other code using the cursor page request...
end
end
Session
If the plug JWT is used, the authorization header will be validated and the session token will be injected into the connection.
pipeline :authenticated do
plug(ServerUtils.Plugs.Session.JwtSession)
end
scope "/" do
pipe_through([:authenticated])
get("/protected_stuff", MyApp.StuffController, :get_protected_stuff)
end
defmodule MyApp.StuffController do
use MyApp, :controller
def get_protected_stuff(conn, params) do
cursor_page_request = conn.private[:server_utils][:session]
# Some other code using the authenticated request...
end
end