plebble
auth_app.h
Go to the documentation of this file.
1 /*
2 -------------------------------------------------------------------------------
3  PLEBBLE
4 -------------------------------------------------------------------------------
5  Copyright (C) 2019-2020 KATLAS Technology. (http://katlastechnology.com)
6  Copyright (C) 2017-2020 Marcos Mayorga. (mm@mm-studios.com)
7 
8  This file is part of our Plebble(R) Platform.
9 
10  The code below cannot be copied, used for any purpose other than the one
11  agreed and/or distributed without the express permission of
12  KATLAS Technology.
13 -------------------------------------------------------------------------------
14 
15 
16 */
17 #ifndef USGOV_1889feb46c109de0a04e33395e575f90dccd36322bcf52a8e6c93042928b612a
18 #define USGOV_1889feb46c109de0a04e33395e575f90dccd36322bcf52a8e6c93042928b612a
19 
20 #include "app.h"
21 #include "peer_t.h"
22 #include "policies.h"
23 #include <string>
24 #include <us/gov/peer/daemon.h>
25 #include <us/gov/engine/app.h>
26 #include <map>
27 #include <set>
28 #include <tuple>
29 #include <mutex>
30 #include <chrono>
31 #include <unordered_set>
32 #include <unordered_map>
33 #include <list>
34 #include "evidence.h"
35 #include <us/gov/config.h>
36 #include <us/gov/crypto/hash.h>
37 #include <us/gov/crypto/ec.h>
38 
39 namespace test {
40  struct auth_app;
41 }
42 
43 namespace us { namespace gov {
44 namespace engine {
45 
46 struct daemon;
47 struct acl_tx;
48 
49 namespace auth {
50  using namespace std;
51  using socket::datagram;
56 
57  struct app:engine::app {
58  typedef engine::app b;
59  friend struct test::auth_app;
60 
61  static const char* KO_78101;
62  static const char* KO_73291;
63 
64  #ifdef CFG_PERMISSIONED_NETWORK
65  static pub_t node_master_pubkey;
66  #endif
67 
69 
71  ~local_delta() override;
74  int app_id() const override;
75  bool operator == (const local_delta& other) =delete;
76  void to_stream(ostream& os) const override;
77  void from_stream(istream& is) override;
78  void from_stream_prev(istream& is) override;
80  void hash_data(crypto::ripemd160&) const override;
81  void dump(ostream&os) const;
82 
85  };
86 
87  struct delta final:engine::app::delta {
89 
90  delta() {}
91  ~delta() override {}
92  delta(const delta&)=delete;
93  delta& operator = (const delta&)=delete;
94  uint64_t merge(engine::app::local_delta* other0) override;
95  void end_merge() override;
96  void to_stream(ostream& os) const override;
97  static delta* from_stream(istream& is);
98  static delta* from_stream_prev(istream& is);
99  struct merger:map<hash_t,engine::majority_merger<account_t>> {
100  void merge(const nodes_t&);
101  void end_merge(nodes_t&, uint16_t seen);
102  };
105 
108  };
109 
110  struct collusion_control_t final:unordered_map<uint32_t,unsigned char> {
111  static unsigned char max_nodes_per_ip;
112  bool allow(uint32_t ip_addr);
113  void rm(uint32_t ip_addr);
114  void update(const nodes_t&);
115  void dump(ostream&) const;
116  };
117 
118  struct db_t final {
119  db_t(nodes_t& n,mutex& mn,nodes_t& h,mutex& mh):nodes(n), mx_nodes(mn), hall(h), mx_hall(mh) {}
120  peer_t::stage_t get_stage(const hash_t&) const;
121  void hash(hasher_t&) const;
122  void to_stream(ostream& os) const;
123  void from_stream(istream& os);
124  void from_stream_prev(istream& os);
125  void dump(ostream& os) const;
126  void clear();
127  void dump_as_seeds(ostream&) const;
129 
130  mutex& mx_nodes;
132  mutex& mx_hall;
134  };
135 
136  #if CFG_COUNTERS==1
137  struct counters_t final {
138  uint32_t basic_auth_completed{0};
139  uint32_t not_authorized{0};
140  uint32_t invalid_net_address{0};
141  uint32_t sysop_connections{0};
142  uint32_t node_connections{0};
143  uint32_t out_connections{0};
144  uint32_t hall_connections{0};
145 
146  void dump(ostream&os) const;
147  };
148  static counters_t counters;
149  #endif
150 
153  node_address(peer_t::stage_t stage, const hash_t& pkh, uint32_t net_addr, uint16_t pport);
154  hash_t compute_hash() const override;
155  void to_streamx(ostream&) const;
156  void write_pretty(ostream&os) const override;
157  string name() const override { return "auth::app::node_address"; }
158 
159  void dump(const string& prefix, ostream&) const;
160 
163  uint32_t net_addr;
164  uint16_t pport;
165  };
166 
167  constexpr static const char* name={"auth"};
168  static constexpr int id() { return 20; }
169 
171  app(const app&)=delete;
172  app& operator = (const app&)=delete;
173  ~app() override;
174 
175  string get_name() const override { return name; }
176  int get_id() const override { return id(); }
177  bool shell_command(istream&, ostream&) override;
178  void save_db(ostream&) const override;
179  bool load_db(istream& is) override;
180  bool load_db_prev(istream& is) override;
181  void import(const nodes_t& src, nodes_t& dst);
182  void import(const engine::app::delta&, const engine::pow_t&) override;
184  static evidence* evidence_from_stream(uint8_t evid, istream&);
185  bool process(const evidence&) override;
186  void process(const node_address&);
187 // void remote_port(const crypto::ec::keys::pub_t& pubk, uint16_t rport);
188  void clear() override;
189  void basic_auth_completed(peer_t* p, uint16_t rpport);
191  inline bool is_node() const { return my_stage()==peer_t::node; }
192  const keys& get_keys() const;
193  bool account_state(const hash_t& pubkeyh, uint32_t& netaddr, uint16_t& port, peer_t::stage_t& stage) const;
194  bool account_state(const nodes_t&, const hash_t& pubkeyh, uint32_t& netaddr, uint16_t& port) const;
195  bool account_state(const local_delta&, const hash_t& pubkeyh, uint32_t& netaddr, uint16_t& port, peer_t::stage_t& stage) const;
196 
197  #ifdef CFG_PERMISSIONLESS_NETWORK
198  void add_growth_transactions(unsigned int seed);
199  void layoff(nodes_t& n, uint16_t cut);
200  void layoff();
201  #endif
202  #ifdef CFG_PERMISSIONED_NETWORK
203  bool process(const acl_tx&);
204  #endif
205 
206  bool process_query(peer_t *, datagram*) override;
209 
210  double growth{0.01};
211  int min_growth{1};
212  uint16_t layoff_days{LAYOFF_DAYS};
216 
217  local_delta* pool{0};
218  mutex mx_pool;
219  mutable peer_t::stage_t cache_my_stage{peer_t::unknown};
220 
221  };
222 
223 }
224 }}
225 
226 }
227 
228 namespace std {
229  template <>
231  size_t operator()(const us::gov::engine::auth::app::account_t&) const noexcept;
232  };
233 }
234 
235 #endif
236 
us::gov::engine::auth::app::local_delta::hash_data_to_sign
void hash_data_to_sign(crypto::ec::sigmsg_hasher_t &) const override
us::gov::engine::auth::app::db_t::to_stream
void to_stream(ostream &os) const
app.h
us::gov::engine::signed_data::pubkey
pubkey_t pubkey
Definition: signed_data.h:51
us::gov::engine::auth::app::collusion_control_t::update
void update(const nodes_t &)
us::gov::engine::app::hasher_t
crypto::ripemd160 hasher_t
Definition: app.h:44
us::gov::engine::auth::app::process
bool process(const evidence &) override
us::gov::engine::auth::app::save_db
void save_db(ostream &) const override
us::gov::sys::install_script_response::ref
string ref
Definition: install_script_response.h:52
us::gov::engine::auth::app::account_state
bool account_state(const local_delta &, const hash_t &pubkeyh, uint32_t &netaddr, uint16_t &port, peer_t::stage_t &stage) const
us::gov::engine::auth::app::local_delta::local_delta
local_delta(const local_delta &)
us::gov::engine::auth::app::collusion_control_t::rm
void rm(uint32_t ip_addr)
Definition: auth_app.cpp:679
us::gov::engine::auth::app::mx_pool
mutex mx_pool
Definition: auth_app.h:218
us::gov::engine::auth::app::db_t::dump
void dump(ostream &os) const
networking.h
us::gov::engine::auth::app::local_delta::hall
nodes_t hall
Definition: auth_app.h:84
us::gov::engine::auth::app::app
app(pub_t &, engine::daemon &)
evidence.h
us::gov::engine::auth::app::node_address::pport
uint16_t pport
Definition: auth_app.h:164
us::gov::engine::auth::app::local_delta::hash_data
void hash_data(crypto::ripemd160 &) const override
us::gov::engine::auth::app::collusion_control_t::allow
bool allow(uint32_t ip_addr)
Definition: auth_app.cpp:664
us::gov::engine::auth::app::db_t::get_stage
peer_t::stage_t get_stage(const hash_t &) const
Definition: auth_app.cpp:758
us::gov::cash::hash_t
hasher_t::value_type hash_t
Definition: app.h:55
us::gov::sys::install_script_response::response
string response
Definition: install_script_response.h:51
diff.h
us::gov::peer::daemon::lookup_node
bool lookup_node(const hash_t &p, ostream &os) const
us::gov::engine::auth::app
Definition: auth_app.h:57
us::gov::sys::install_script_response
Definition: install_script_response.h:32
AUTOMATIC_UPDATES_PUBKEY
#define AUTOMATIC_UPDATES_PUBKEY
Definition: config.h:15
us::gov::engine::auth::app::app
app(const app &)=delete
us::gov::engine::pow_t
Definition: diff.h:62
us::gov::engine::app::get_seed
static unsigned int get_seed()
us::gov::engine::auth::app::import
void import(const nodes_t &src, nodes_t &dst)
Definition: auth_app.cpp:689
std::hash< us::gov::sys::app::local_delta >::operator()
size_t operator()(const us::gov::sys::app::local_delta &) const
Definition: app.cpp:36
us::gov::socket::datagram::decode_sequence
uint16_t decode_sequence() const
us::gov::crypto::ripemd160::finalize
void finalize(unsigned char hash[output_size])
us::gov::engine::auth::app::delta::delta
delta()
Definition: auth_app.h:90
us::gov::engine::auth::app::b
engine::app b
Definition: auth_app.h:58
us::gov::engine::peer_t::out
@ out
Definition: peer_t.h:32
us::gov::crypto::sha256::write
void write(const unsigned char *data, size_t len)
us::gov::engine::auth::app::node_address
Definition: auth_app.h:151
us::gov::engine::auth::app::db_t::nodes
nodes_t & nodes
Definition: auth_app.h:131
us::gov::engine::auth::app::send_response__gov_engine_nodes
bool send_response__gov_engine_nodes(peer_t *c, socket::datagram *d)
vcs.h
us::gov::engine::auth::app::db
db_t db
Definition: auth_app.h:215
us::gov::cash::evidence
engine::evidence evidence
Definition: app.h:57
protocol.h
us::gov::engine::app::local_delta
Definition: app.h:47
us::gov::engine::auth::app::local_delta::from_stream_prev
void from_stream_prev(istream &is) override
us::gov::dfs::peer_t
relay::peer_t peer_t
Definition: daemon.h:31
us
Definition: daemon.h:22
us::gov::crypto::ripemd160::value_type::to_b58
string to_b58() const
us::gov::engine::auth::app::local_delta::nodes
nodes_t nodes
Definition: auth_app.h:83
us::gov::crypto::ripemd160::value_type
Definition: ripemd160.h:38
us::gov::engine::auth::app::db_t
Definition: auth_app.h:118
unlikely
#define unlikely(x)
Definition: likely.h:30
us::gov::engine::auth::app::~app
~app() override
us::gov::peer::daemon::nodes_t::to_stream
void to_stream(ostream &os) const
us::gov::engine::auth::app::process_query
bool process_query(peer_t *, datagram *) override
us::gov::cash::pubkey_t
keys::pub_t pubkey_t
Definition: app.h:53
us::gov::engine::app::delta
Definition: app.h:67
us::gov::peer::daemon::nodes_t::from_stream
void from_stream(istream &os)
us::gov::relay::evidence::eid
uint8_t eid
Definition: evidence.h:56
us::gov::engine::auth::app::db_t::from_stream
void from_stream(istream &os)
app.h
us::gov::engine::auth::app::send_response__gov_engine_lookup_node
bool send_response__gov_engine_lookup_node(peer_t *c, socket::datagram *d)
likely.h
us::gov::peer::daemon::dump_random_nodes
void dump_random_nodes(size_t num, ostream &os) const
us::gov::engine::auth::app::account_state
bool account_state(const nodes_t &, const hash_t &pubkeyh, uint32_t &netaddr, uint16_t &port) const
us::gov::sys::install_script::script
string script
Definition: install_script.h:56
us::gov::engine::auth::app::get_name
string get_name() const override
Definition: auth_app.h:175
us::gov::engine::daemon::peerd
networking peerd
Definition: daemon.h:295
us::gov::engine::auth::app::node_address::dump
void dump(const string &prefix, ostream &) const
us::gov::engine::auth::app::local_delta
Definition: auth_app.h:70
us::gov::engine::auth::app::db_t::mx_nodes
mutex & mx_nodes
Definition: auth_app.h:130
us::gov::engine::auth::app::process
void process(const node_address &)
us::gov::engine::auth::app::pool
local_delta * pool
Definition: auth_app.h:217
us.tuple
Definition: tuple.java:19
us::gov::engine::auth::app::delta::from_stream
static delta * from_stream(istream &is)
us::gov::engine::auth::hash_t
pub_t::hash_t hash_t
Definition: auth_app.h:54
daemon.h
us::gov::crypto::ec::keys::pub_t
Definition: ec.h:44
test
Definition: auth_app.h:39
daemon.h
us::gov::engine::auth::app::db_t::collect_as_wallet_endpoints
void collect_as_wallet_endpoints(vector< tuple< hash_t, uint32_t, uint16_t >> &) const
us::gov::engine::auth::app::delta::from_stream_prev
static delta * from_stream_prev(istream &is)
protocol.h
us::gov::engine::auth::app::node_address::stage
engine::peer_t::stage_t stage
Definition: auth_app.h:161
us::gov::socket::datagram
Definition: datagram.h:44
us::gov::cash::app::id
static constexpr int id()
Definition: app.h:322
us::gov::engine::auth::app::KO_73291
static const char * KO_73291
Definition: auth_app.h:62
us::gov::crypto::sha256
Definition: sha256.h:33
us::gov::engine::acl_tx
Definition: acl_tx.h:30
us::gov::engine::auth::app::local_delta::~local_delta
~local_delta() override
us::gov::engine::peer_t::stage_t
stage_t
Definition: peer_t.h:29
us.vcs.version
static String version()
Definition: vcs.java:39
install_script.h
us::gov::engine::peer_t
Definition: peer_t.h:27
us::gov::engine::auth::app::collusion_control_t::max_nodes_per_ip
static unsigned char max_nodes_per_ip
Definition: auth_app.h:111
us::gov::auth::daemon
id::daemon daemon
Definition: daemon.h:25
us::gov::engine::auth::app::db_t::db_t
db_t(nodes_t &n, mutex &mn, nodes_t &h, mutex &mh)
Definition: auth_app.h:119
us::gov::sys::app::delta::from_stream
static delta * from_stream(istream &is)
us::gov::engine::auth::app::basic_auth_completed
void basic_auth_completed(peer_t *p, uint16_t rpport)
us::gov::engine::auth::app::delta::delta
delta(const delta &)=delete
us::gov::engine::auth::app::load_db
bool load_db(istream &is) override
us::gov::engine::auth::app::KO_78101
static const char * KO_78101
Definition: auth_app.h:61
us::gov::engine::peer_t::hall
@ hall
Definition: peer_t.h:33
daemon.h
us::gov::engine::auth::app::collusion_control_t::dump
void dump(ostream &) const
us::gov::engine::app
Definition: app.h:43
us::gov::socket::datagram::service
uint16_t service
Definition: datagram.h:200
us::gov::engine::peer_t::stagestr
constexpr static array< const char *, num_stages > stagestr
Definition: peer_t.h:38
us::gov::engine::auth::app::node_address::net_addr
uint32_t net_addr
Definition: auth_app.h:163
us::gov::engine::shell
Definition: shell.h:28
us::gov::engine::auth::app::id
static constexpr int id()
Definition: auth_app.h:168
us::gov::engine::auth::pub_t
peer::daemon::pub_t pub_t
Definition: auth_app.h:53
us::gov::engine::auth::app::node_address::to_streamx
void to_streamx(ostream &) const
us::gov::engine::auth::app::delta
Definition: auth_app.h:87
us::gov::engine::auth::app::db_t::hall
nodes_t & hall
Definition: auth_app.h:133
us::gov::peer::daemon::nodes_t
Definition: daemon.h:104
us::gov::engine::auth::app::db_t::clear
void clear()
us::gov::engine::auth::app::delta::merger::end_merge
void end_merge(nodes_t &, uint16_t seen)
us::gov::sys::app::id
static constexpr int id()
Definition: app.h:200
us::gov.protocol.gov_engine_lookup_node
static final int gov_engine_lookup_node
Definition: protocol.java:67
us::gov::engine::peer_t::unknown
@ unknown
Definition: peer_t.h:30
install_script_response.h
us::gov
Definition: daemon.h:22
us::gov::engine::auth::app::delta::merger::merge
void merge(const nodes_t &)
us::gov::peer::daemon::account_t
Definition: daemon.h:82
peer_t.h
app.h
us::gov::engine::auth::app::shell_command
bool shell_command(istream &, ostream &) override
us::gov::engine::auth::app::local_delta::from_stream
void from_stream(istream &is) override
us::gov::engine::auth::app::local_delta::dump
void dump(ostream &os) const
us::gov::engine::auth::app::node_address::b
engine::evidence b
Definition: auth_app.h:152
us::gov::engine::auth::app::delta::merger
Definition: auth_app.h:99
us::gov::engine::auth::app::clear
void clear() override
us::gov::engine::daemon
Definition: daemon.h:71
us::gov::engine::auth::app::cache_my_stage
peer_t::stage_t cache_my_stage
Definition: auth_app.h:219
us::gov::engine::auth::app::delta::b
engine::app::delta b
Definition: auth_app.h:88
us::gov::sys
Definition: daemon.h:51
us::gov::cash::app::delta::from_stream_prev
static delta * from_stream_prev(istream &is)
us::gov::cash::hasher_t
ripemd160 hasher_t
Definition: app.h:54
us::gov::crypto::ripemd160
Definition: ripemd160.h:34
us::gov::engine::auth::app::is_node
bool is_node() const
Definition: auth_app.h:191
us::gov::socket::datagram::validate_payload
static bool validate_payload(const string &payload)
us::gov::engine::acl_tx::from_stream
static void from_stream(acl_tx &, istream &)
us::gov::engine::auth::app::node_address::node_address
node_address(peer_t::stage_t stage, const hash_t &pkh, uint32_t net_addr, uint16_t pport)
us::gov::engine::auth::app::collusion_control_t
Definition: auth_app.h:110
us::gov::engine::auth::app::account_t
peer::daemon::account_t account_t
Definition: auth_app.h:68
us::gov::engine::auth::keys
peer::daemon::keys keys
Definition: auth_app.h:52
c
Definition: client.cpp:417
us::ok
static constexpr ko ok
Definition: ko.h:28
acl_tx.h
us::gov::engine::auth::app::node_pubkey
const pub_t & node_pubkey
Definition: auth_app.h:214
c
us::gov::engine::auth::app c
Definition: auth_app.cpp:33
us::gov::engine::auth::app::load_db_prev
bool load_db_prev(istream &is) override
NODEMASTER_PUBKEY
#define NODEMASTER_PUBKEY
Definition: config.h:16
CFG_MAX_NODES
#define CFG_MAX_NODES
Definition: config.h:35
us::gov::engine::auth::app::account_state
bool account_state(const hash_t &pubkeyh, uint32_t &netaddr, uint16_t &port, peer_t::stage_t &stage) const
us::gov::sys::app::delta::from_stream_prev
static delta * from_stream_prev(istream &is)
us::gov.protocol.gov_engine_nodes
static final int gov_engine_nodes
Definition: protocol.java:66
likely
#define likely(x)
Definition: likely.h:29
us::gov::engine::auth::app::my_stage
peer_t::stage_t my_stage() const
us::gov::engine
Definition: hmi.h:32
us::gov::socket::datagram::parse
ko parse(vector< t > &content) const
Definition: datagram.h:170
std
Definition: app.h:380
us::gov::engine::auth::app::local_delta::app_id
int app_id() const override
us::gov::sys::app::local_delta
Definition: app.h:132
us::gov::engine::auth::app::delta::hall
nodes_t hall
Definition: auth_app.h:104
us::gov::engine::auth::app::node_address::write_pretty
void write_pretty(ostream &os) const override
us::gov::engine::auth::app::create_local_delta
engine::app::local_delta * create_local_delta() override
us::gov::engine::auth::app::evidence_from_stream
static evidence * evidence_from_stream(uint8_t evid, istream &)
c
us::gov::engine::app c
Definition: app.cpp:26
us::gov::engine::auth::app::local_delta::local_delta
local_delta()
us::gov::engine::auth::app::delta::~delta
~delta() override
Definition: auth_app.h:91
stacktrace.h
policies.h
us::gov::engine::auth::app::get_keys
const keys & get_keys() const
hash.h
us::gov::crypto::ec::keys::pub_t::hash
const hash_t & hash() const
Definition: ec.cpp:105
us::gov::engine::app::demon
daemon & demon
Definition: app.h:101
peer_t.h
us::gov::crypto::ec::keys
Definition: ec.h:43
us::gov::engine::auth::app::delta::merge
uint64_t merge(engine::app::local_delta *other0) override
us::gov::engine::signed_data::hash
ripemd160::value_type hash() const
config.h
us::gov::engine::auth::app::delta::end_merge
void end_merge() override
base58.h
engine.h
us::gov::crypto::ripemd160::write
void write(const vector< unsigned char > &)
us::gov::engine::auth::app::db_t::mx_hall
mutex & mx_hall
Definition: auth_app.h:132
us::gov::engine::auth::nodes_t
peer::daemon::nodes_t nodes_t
Definition: auth_app.h:55
us::gov::engine::auth::app::node_address::name
string name() const override
Definition: auth_app.h:157
us::gov.protocol
Definition: protocol.cs:20
us::gov::engine::auth::app::db_t::hash
void hash(hasher_t &) const
us::gov::engine::pubkeyh_t
pubkey_t::hash_t pubkeyh_t
Definition: diff.h:41
us::gov::engine::auth::app::delta::to_stream
void to_stream(ostream &os) const override
Definition: auth_app.cpp:636
us::gov::engine::auth::app::node_address::pkh
hash_t pkh
Definition: auth_app.h:162
us::gov::cash::app::delta::from_stream
static delta * from_stream(istream &is)
us::gov::relay::evidence
Definition: evidence.h:31
us::gov::sys::app
Definition: app.h:63
us::gov::engine::auth
Definition: auth_app.h:49
LAYOFF_DAYS
#define LAYOFF_DAYS
Definition: config.h:21
gov.h
shell.h
us::gov::engine::auth::app::db_t::dump_as_seeds
void dump_as_seeds(ostream &) const
us::gov::sys::install_script
Definition: install_script.h:32
ec.h
us::gov::sys::install_script::verify
bool verify(ostream &os) const override
std::hash< us::gov::engine::auth::app::account_t >::operator()
size_t operator()(const us::gov::engine::auth::app::account_t &) const noexcept
us::gov::engine::auth::app::delta::hall_merger
merger hall_merger
Definition: auth_app.h:107
us::gov::sys::app::local_delta::get_hash
const hash_t & get_hash() const
us::gov::engine::auth::app::delta::nodes
nodes_t nodes
Definition: auth_app.h:103
auth_app.h
us::gov::engine::auth::app::db_t::from_stream_prev
void from_stream_prev(istream &os)
log
#define log
Definition: gov.h:83
logdump
#define logdump
Definition: gov.h:84
us::gov::engine::auth::app::node_address::compute_hash
hash_t compute_hash() const override
us::gov::socket::client::ip4_decode
static string ip4_decode(uint32_t addr)
us::gov::engine::auth::app::collusion_control
collusion_control_t collusion_control
Definition: auth_app.h:213
us::gov::engine::auth::app::delta::nodes_merger
merger nodes_merger
Definition: auth_app.h:106
us::gov::engine::peer_t::node
@ node
Definition: peer_t.h:34
us::gov::engine::auth::app::local_delta::to_stream
void to_stream(ostream &os) const override
us::gov::engine::auth::app::get_id
int get_id() const override
Definition: auth_app.h:176