diff --git a/doc/src/api/rest/rest-api-v1.json b/doc/src/api/rest/rest-api-v1.json index b66d90ae13..5de7bae460 100644 --- a/doc/src/api/rest/rest-api-v1.json +++ b/doc/src/api/rest/rest-api-v1.json @@ -3542,6 +3542,43 @@ } } }, + "lua/rest/v1/get/ntopng/session.lua": { + "post": { + "tags": [ + "Users" + ], + "summary": "Create a new ntopng user session Cookie (same as create/ntopng/session.lua)", + "description": "Generate a new user session to be used as session Cookie", + "operationId": "create_ntopng_session", + "produces": [ + "application/json" + ], + "parameters": [ + { + "name": "username", + "in": "formData", + "description": "Username", + "required": true, + "type": "string" + }, + { + "name": "auth_session_duration", + "in": "formData", + "description": "Session duration (seconds). Default: 0 (no expiration).", + "required": false, + "type": "integer" + } + ], + "responses": { + "-3": { + "description": "NOT_GRANTED" + }, + "-5": { + "description": "INVALID_ARGUMENTS" + } + } + } + }, "/lua/pro/rest/v1/get/infrastructure/instance.lua": { "get": { "tags": [ diff --git a/scripts/lua/rest/v1/get/ntopng/session.lua b/scripts/lua/rest/v1/get/ntopng/session.lua new file mode 100644 index 0000000000..cfbf3aea85 --- /dev/null +++ b/scripts/lua/rest/v1/get/ntopng/session.lua @@ -0,0 +1,46 @@ +-- +-- (C) 2013-21 - ntop.org +-- + +local dirs = ntop.getDirs() +package.path = dirs.installdir .. "/scripts/lua/modules/?.lua;" .. package.path +package.path = dirs.installdir .. "/scripts/lua/modules/pools/?.lua;" .. package.path + +require "lua_utils" +local json = require ("dkjson") +local rest_utils = require("rest_utils") + +-- +-- Get a new ntopng user session (Cookie) +-- Example: curl -u admin:admin -H "Content-Type: application/json" -d '{"username": "mario"}' http://localhost:3000/lua/rest/v1/get/ntopng/session.lua +-- +-- NOTE: in case of invalid login, no error is returned but redirected to login +-- + +local rc = rest_utils.consts.success.ok +local res = {} + +local username = _POST["username"] +local auth_session_duration = _POST["auth_session_duration"] + +if username == nil then + rest_utils.answer(rest_utils.consts.err.invalid_args) + return +end + +username = string.lower(username) + +local duration = 0 + +if not isEmptyString(auth_session_duration) then + duration = tonumber(auth_session_duration) +end + +res.session = ntop.createUserSession(username, duration) + +if isEmptyString(res.session) then + rest_utils.answer(rest_utils.consts.err.invalid_args) + return +end + +rest_utils.answer(rc, res)