Jump to content
Cesbo Community
  • Announcements

    • RadioSintetica

      Information   10/21/18

      Registration on the forum temporarily closed! For support requests, please contacat us: https://cesbo.com/help
      Our community in Telegram: @cesbo_en (English language) , @cesbo_ru (Russian language) , @cesbo_es (Spanish Language)
Sign in to follow this  
AlexZagr

Скрипт авторизации доступа

Recommended Posts

Помогите разобраться с авторизацией доступа. https://cesbo.com/ru/astra/auth/ прочитал несколько раз, в /etc/astra/mod есть такой auth.lua

function on_response(response, callback)
    if response.code ~= 200 then
        callback(true)
        return nil
    end

    callback(true)
end

function auth_request(client_id, request, callback)
    if not request then
        -- завершение соединения с клиентом
        return nil
    end

    http_request({
        host = "10.1.1.216",
        port = "8080",
        path = "/json/" .. request.addr,
        headers = {
            "User-Agent: Astra",
            "Host: 10.1.1.216:8080",
            "Connection: close",
        },
        callback = function(_, response)
            on_response(response, callback)
        end
    })
    callback(true)
end

это тот вариант когда цель - хотя-бы увидеть в логах апача запрос /json/<ip>, astra 5.64-test, в логах ничего нет от сервера с астрой

в конфиге

 "output": [
             "http://10.1.21.25:51/Test/index.m3u8#auth"
  ]

Запускаю в vlc http://10.1.21.25:51/Test/index.m3u8

Share this post


Link to post
Share on other sites

Доброе время суток.

На сколько я понял, да и смог проверить на простом, для отказа в доступе нужно вызывать callback(false).
А в Вашем конфиге везде стоит TRUE

Share this post


Link to post
Share on other sites

Уважаемые форумчане также нужна помощь с авторизацией. есть база даных с токенами и датами когда токен активен или нет. также в базу вношу даные об количестве разрешенных подключений. по умолчанию при создании токена ставится 2 в ручном режыме могу увеличивать. луа скрипт обращается с базой через прослойку пхп. есть только проблема астра время от времени падает. может быть раз в 15 мин может быть раз в час. я не силен  в луа не забесплатно кто может помочь исправить для нормальной работы. пишыте в личку.

 

вот лог с астры

 

Nov 14 23:11:30: ERROR: [main] error in call to Lua API. /etc/astra_2/mod/auth.lua:42: attempt to index local 'first_session_data' (a nil value)
Nov 14 23:11:30: ERROR: [main] abort execution
Nov 14 23:11:30: ERROR: 1: /etc/astra_2/mod/auth.lua:60 -- <unknown> [Lua]
Nov 14 23:12:05: INFO: [main] Starting Astra v.5.63 [commit:008567ae date:2017-07-27]

 

вот сам луа скрыпт

 

auth_server = parse_url("http://**.**.**.161/ott_auth.php")

tokenList = {}

function auth_request(client_id, request, callback)
    local session_data = http_output_client_list[client_id]

    if not request then
        if session_data.login then
            local conlimit_data = tokenList[session_data.login]
            if conlimit_data then
                for k,v in ipairs(conlimit_data) do
                    if v == client_id then
                        table.remove(conlimit_data, k)
                        break
                    end
                end
                if #conlimit_data == 0 then
                    tokenList[session_data.login] = nil
                end
            end
            session_data.login = nil
        end
        return nil
    end

    if not request.query.token then
        callback(false)
        return nil
    end

    local function check_conlimit(tokenLimit)
        local conlimit_data = tokenList[request.query.token]
        if not conlimit_data then
            conlimit_data = {}
            tokenList[request.query.token] = conlimit_data
        end
        table.insert(conlimit_data, client_id)
        if #conlimit_data > tokenLimit then
            local first_client_id = conlimit_data[1]
            local first_session_data = http_output_client_list[first_client_id]
            first_session_data.server:close(first_session_data.client)
        end
    end

    http_request({
        host = auth_server.host,
        path = auth_server.path .. "?token=" .. request.query.token,
        headers = {
            "User-Agent: Astra",
            "Host: " .. auth_server.host .. ":" .. auth_server.port,
            "Connection: close",
        },
        callback = function(_, response)
            if response.code == 200 then
                local tokenLimit = tonumber(response.headers["x-max-sessions"])
                if tokenLimit == nil or tokenLimit == 0 then
                    tokenLimit = 2
                end
                check_conlimit(tokenLimit)
                session_data.login = request.query.token
                callback(true)
            else
                callback(false)
            end
        end,
    })
end

Share this post


Link to post
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now
Sign in to follow this  

×