Skip to content

Instantly share code, notes, and snippets.

@mattneel
Created July 11, 2018 16:27
Show Gist options
  • Save mattneel/4d1a6c5dca29b424c41d2b358bf707b5 to your computer and use it in GitHub Desktop.
Save mattneel/4d1a6c5dca29b424c41d2b358bf707b5 to your computer and use it in GitHub Desktop.
eradius server
config :eradius,
# defines radius callback, which should be called
radius_callback: Extent.Server,
session_nodes: [node()],
root: [
{ {'root', []}, [{'0.0.0.0', "testing123"}] }
],
servers: [
root: {'0.0.0.0', [1812, 1813, 3799]}
]
defmodule Extent.Server do
use GenServer
require Logger
@behaviour :eradius_server
require Record
Record.defrecord :nas_prop, Record.extract(:nas_prop, from_lib: "eradius/include/eradius_lib.hrl")
Record.defrecord :radius_request, Record.extract(:radius_request, from_lib: "eradius/include/eradius_lib.hrl")
Record.defrecord :attribute, Record.extract(:attribute, from_lib: "eradius/include/eradius_dict.hrl")
Record.defrecord :vendor, Record.extract(:vendor, from_lib: "eradius/include/eradius_dict.hrl")
Record.defrecord :value, Record.extract(:value, from_lib: "eradius/include/eradius_dict.hrl")
def start_link(_) do
GenServer.start_link(__MODULE__, :ok)
end
def init(_) do
{:ok, start()}
end
def start() do
:eradius.modules_ready([__MODULE__])
self()
end
def radius_request(radius_request(cmd: :request) = req, nas, args), do: auth_request(req, nas, args)
def radius_request(radius_request(cmd: :discreq) = req, nas, args), do: disc_request(req, nas, args)
def radius_request(radius_request(cmd: :accreq) = req, nas, args), do: acct_request(req, nas, args)
def radius_request(radius_request(cmd: cmd) = _request, nas, args) do
Logger.debug("[RADIUS] Unhandled command: #{inspect cmd} #{inspect nas} #{inspect args}")
:noreply
end
def auth_request(req, nas, args) do
Logger.debug("[RADIUS:AUTH] #{inspect req} #{inspect nas} #{inspect args}")
{:reply, check_password(req)}
end
def disc_request(req, nas, args) do
Logger.debug("[RADIUS:DISC] #{inspect req} #{inspect nas} #{inspect args}")
{:reply, radius_request(cmd: :discack)}
end
def acct_request(req, nas, args) do
Logger.debug("[RADIUS:ACCT] #{inspect req} #{inspect nas} #{inspect args}")
{:reply, radius_request(cmd: :accresp)}
end
def check_password(req) do
case :eradius_auth.check_password("testpass", req) do
{true, _} -> radius_request(cmd: :accept)
_ -> radius_request(cmd: :reject)
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment