API
El gateway envia un request a http://wifi.tictapps.com/welcome?data=DATA
Siendo data los siguientes datos encodeados en base64:
{
"ip":"172.22.0.115",
"mac-address":"00:db:df:15:42:67",
"url":"http://google.com",
"gwurl":"http://190.2.3.4/auth/172.22.0.103"
}
Se hacen algunos reemplazos para evitar problemas en la url: (+ -,/ _,= ~)
data=eyJpcCI6IjE3Mi4yMi4wLjExNSIsICJtYWMtYWRkcmVzcyI6IjAwOmRiOmRmOjE1OjQyOjY3Iiw gInVybCI6Imh0dHA6Ly9nb29nbGUuY29tIiwgImd3dXJsIjoiaHR0cDovLzE5MC4yLjMuNC9hcGkvYXV 0aCJ9Cg~~
Como es un Mikrotik hay una direrencia en gwurl:
{
"ip":"172.22.0.115",
"mac-address":"00:db:df:15:42:67",
"url":"http://google.com",
"gwurl":"http://wifi.tictapps.com:8080/auth/190.2.3.4"
}
Metodos disponibles
LOGIN
C: POST http://wifi.tictapps.com:8080/auth/190.2.3.4
C: {"ip":"172.22.0.115","mac-address":"00:db:df:15:42:67","group":"paid",
"type":"login","available":120,"id":"1"}
S: {"status":"ok"}
LOGOUT
C: POST http://wifi.tictapps.com:8080/auth/190.2.3.4
C: {"ip":"172.22.0.115","mac-address":"00:db:df:15:42:67","type":"logout"}
S: {"status":"ok"}
LOGOUT
C: POST http://wifi.tictapps.com:8080/auth/190.2.3.4
C: {"ip":"172.22.0.115","type":"logout"}
S: {"status":"ok"}
LIST (no implementado)
C: POST http://wifi.tictapps.com:8080/auth/190.2.3.4
C: {"type":"list"}
S: {"status":"ok",
"items":[{"ip":"172.22.0.115","mac-address":"00:db:df:15:42:67",
"group":"paid","available":45,"timestamp":1427816763}]}
Proceso con Mikrotik
mikrotik —> /inform El mikrotik hace un POST con datos (mac ip nas)
api/inform —> tomcat data=xxx Se hace la redireccion al portal con los parametros data=xxx (mac ip url gwurl)
tomcat —> /auth?nas=x.x.x.x Se hace el POST con login/logout para permitir al usuario
Aqui api/auth debe agregar al radius el usuario
Pruebas
Enviar Radius
echo "User-Name=1.2.3.4,Password=''" | radclient -x wifi.tictapps.com auth key
echo "Framed-IP-Address=10.5.50.254,Session-Timeout=600" | radclient -x \
-t10 -r3 172.22.0.112 coa Baicom6710
Crear usuario
>>> from models import User
>>> user = User('1:2:3:4','1.2.3.4','vip',1200)
>>> db.session.add(user)
>>> db.session.commit()
DNS
Poner los DNS de BAICOM con filtros, agregar la ip publica