]> git.stg.codes - stg.git/blob - projects/stargazer/plugins/other/radius/radius.h
Radius. (#11)
[stg.git] / projects / stargazer / plugins / other / radius / radius.h
1 #pragma once
2
3 #include "stg/auth.h"
4 #include "stg/plugin.h"
5 #include "stg/module_settings.h"
6 #include "stg/subscriptions.h"
7 #include "stg/logger.h"
8 #include "server.h"
9
10 #include <boost/asio.hpp>
11 #include <string>
12 #include <memory>
13 #include <mutex>
14 #include <jthread.hpp>
15 #include <cstdint> //uint8_t, uint32_t
16
17 namespace STG
18 {
19     struct Settings;
20
21     class Users;
22
23     class RAD_SETTINGS
24     {
25         public:
26             RAD_SETTINGS();
27             virtual ~RAD_SETTINGS() {}
28             const std::string & GetStrError() const { return m_errorStr; }
29             int ParseSettings(const ModuleSettings & s);
30
31             uint16_t GetPort() const { return m_port; }
32             const std::string & GetDictionaries() const { return m_dictionaries; }
33             const std::string & GetSecret() const { return m_secret; }
34
35         private:
36             std::string m_errorStr;
37             uint16_t m_port;
38             std::string m_dictionaries;
39             std::string m_secret;
40     };
41
42     class RADIUS : public Auth
43     {
44         public:
45             RADIUS();
46             RADIUS(const RADIUS&) = delete;
47             RADIUS& operator=(const RADIUS&) = delete;
48
49             void SetUsers(Users* u) { m_users = u; }
50             void SetSettings(const ModuleSettings & s) override { m_settings = s; }
51             int ParseSettings() override;
52
53             int Start() override;
54             int Stop() override;
55             int Reload(const ModuleSettings & /*ms*/) override { return 0; }
56             bool IsRunning() override;
57             void SetRunning(bool val);
58
59             const std::string & GetStrError() const override { return m_errorStr; }
60             std::string GetVersion() const override;
61
62             uint16_t GetStartPosition() const override { return 0; }
63             uint16_t GetStopPosition() const override { return 0; }
64
65             int SendMessage(const Message & msg, uint32_t ip) const override { return 0; }
66
67         private:
68             std::mutex m_mutex;
69
70             boost::asio::io_service m_ioService;
71             int Run(std::stop_token token);
72
73             mutable std::string m_errorStr;
74             RAD_SETTINGS m_radSettings;
75             ModuleSettings m_settings;
76
77             bool m_running;
78
79             std::jthread m_thread;
80             Users* m_users;
81             PluginLogger m_logger;
82
83             std::unique_ptr<Server> m_server;
84     };
85 }