Документация COREmanager

Мой первый пользователь

 

По умолчанию доступ к панели управления открыт только для локального администратора сервера. В данной статье описан способ авторизации для собственного пользователя.

Например, у вас есть файл etc/passwd, в котором хранятся имена пользователей и их пароли, разделённые двоеточиями. Пароли хранятся в открытом виде.

За авторизацию пользователей отвечает базовая функция authenticate. Подробнее см. в статье Аутентификация. Поэтому для авторизации собственного пользователя нужно создать обработчик события authenticate. Подробнее см. в статье Изменение поведения системы при определенных действиях пользователей, события.

Чтобы упростить создание собственного метода авторизации, используйте класс isp_api::AuthMethod из C++ CORE API. В минимальном варианте нужно определить два виртуальных метода AuthenByName и AuthenByPassword:

Обратите внимание!
Для упрощения пример не содержит дополнительных проверок.

Пример myauth.cpp

#include <mgr/mgrstr.h>
#include <api/auth_method.h>
#include <api/module.h>
#include <fstream>
#include <sstream>
    
#define PASSWD  "etc/passwd"
namespace {
using namespace isp_api;
class MyAuth : public AuthMethod {
public:         
    MyAuth() : AuthMethod("myauth") {}
    string Lookup(const string &name) const {
        if (!name.empty()) {
            std::ifstream in(PASSWD);
            while (in.good()) {
                std::stringbuf buf; 
                in.get(buf);
                in.get();
                string pass = buf.str();
                string user = str::GetWord(pass, ':');
                if (user == name && !pass.empty())
                    return pass;
            }
        }
        return "";
    }

    void FillupParams(const string &user, mgr_xml::Xml &xml) const {
            xml.GetRoot().AppendChild("ok")
                .SetProp("level", str::Str(lvAdmin))
                .SetProp("name", user)
                .SetProp("method", "myauth");
    }

    virtual void AuthenByName(mgr_xml::Xml &res, const string &name) const {
        if (!Lookup(name).empty())
            FillupParams(name, res);
    }

    virtual void AuthenByPassword(mgr_xml::Xml &res, const string &name, const string &pass) const {
        string lppass = Lookup(name);
        if (!lppass.empty() && lppass == pass)
            FillupParams(name, res);
    }
};

MODULE_INIT(myauth, "") {
    new MyAuth();
}
} // end of private namespace

После создания обработчика выполните сборку компонентов и загрузите библиотеку. Подробнее см. в статье Сборка собственных компонентов.