]> git.stg.codes - stg.git/blob - include/stg/admin_conf.h
c4871970b60eb629d1e4fa18febdfc7e2700304c
[stg.git] / include / stg / admin_conf.h
1 #pragma once
2
3 #include "stg/optional.h"
4
5 #include <string>
6
7 #include <cstdint>
8
9 #define ADM_LOGIN_LEN   (32)
10 #define ADM_PASSWD_LEN  (32)
11
12 namespace STG
13 {
14
15 struct Priv
16 {
17     Priv() noexcept
18         : userStat(0),
19           userConf(0),
20           userCash(0),
21           userPasswd(0),
22           userAddDel(0),
23           adminChg(0),
24           tariffChg(0),
25           serviceChg(0),
26           corpChg(0)
27     {}
28     explicit Priv(uint32_t p) noexcept
29         : userStat((p & 0x00000003) >> 0x00),
30           userConf((p & 0x0000000C) >> 0x02),
31           userCash((p & 0x00000030) >> 0x04),
32           userPasswd((p & 0x000000C0) >> 0x06),
33           userAddDel((p & 0x00000300) >> 0x08),
34           adminChg((p & 0x00000C00) >> 0x0A),
35           tariffChg((p & 0x00003000) >> 0x0C),
36           serviceChg((p & 0x0000C000) >> 0x0E),
37           corpChg((p & 0x00030000) >> 0x10)
38     {}
39
40     Priv(const Priv&) = default;
41     Priv& operator=(const Priv&) = default;
42     Priv(Priv&&) = default;
43     Priv& operator=(Priv&&) = default;
44
45     uint32_t toInt() const noexcept
46     {
47         uint32_t p = (userStat   << 0)  |
48                      (userConf   << 2)  |
49                      (userCash   << 4)  |
50                      (userPasswd << 6)  |
51                      (userAddDel << 8)  |
52                      (adminChg   << 10) |
53                      (tariffChg  << 12) |
54                      (serviceChg << 14) |
55                      (corpChg    << 16);
56         return p;
57     }
58
59     uint16_t userStat;
60     uint16_t userConf;
61     uint16_t userCash;
62     uint16_t userPasswd;
63     uint16_t userAddDel;
64     uint16_t adminChg;
65     uint16_t tariffChg;
66     uint16_t serviceChg;
67     uint16_t corpChg;
68 };
69 //-----------------------------------------------------------------------------
70 struct AdminConf
71 {
72     AdminConf()
73         : password("* NO PASSWORD *")
74     {}
75     AdminConf(const Priv & pr, const std::string & l, const std::string & p)
76         : priv(pr),
77           login(l),
78           password(p)
79     {}
80
81     AdminConf(const AdminConf&) = default;
82     AdminConf& operator=(const AdminConf&) = default;
83     AdminConf(AdminConf&&) = default;
84     AdminConf& operator=(AdminConf&&) = default;
85
86     Priv          priv;
87     std::string   login;
88     std::string   password;
89 };
90 //-----------------------------------------------------------------------------
91 struct AdminConfOpt
92 {
93     Optional<Priv> priv;
94     Optional<std::string> login;
95     Optional<std::string> password;
96 };
97
98 }