git.fiddlerwoaroof.com
Browse code

logger uses delegation

Greg Wiley authored on 18/04/2017 22:57:28
Showing 5 changed files
... ...
@@ -1,4 +1,4 @@
1
-CXXFLAGS += -fPIC -fno-stack-protector
1
+CXXFLAGS += -fPIC -fno-stack-protector -std=c++14
2 2
 CFLAGS += -fPIC -fno-stack-protector
3 3
 
4 4
 OBJS = dual_control.o argument.o dual_control_integrate.o
... ...
@@ -31,7 +31,7 @@ int impl::authenticate(pam_handle *handle, int flags, const std::vector<const st
31 31
 
32 32
     int auth_result = validator_->validate(user_name, token) ? PAM_SUCCESS : PAM_AUTH_ERR;
33 33
 
34
-    logger_->log(auth_result, user_name, token);
34
+    logger_.log(auth_result, user_name, token);
35 35
     return auth_result;
36 36
 }
37 37
 
... ...
@@ -22,10 +22,6 @@ struct dual_control_configuration {
22 22
     validator validator;
23 23
     conversations conversations;
24 24
     logger logger;
25
-    dual_control_configuration()
26
-        : validator(new validator_ifc),
27
-          conversations(new conversations_ifc),
28
-          logger(new logger_ifc) {}
29 25
 };
30 26
 dual_control create_dual_control(const dual_control_configuration &configuration);
31 27
 
... ...
@@ -132,7 +132,7 @@ int logs_authentication() {
132 132
     configuration.validator = validator(new fake_validator(user, token));
133 133
     configuration.conversations = conversations(new fake_conversations(user, token));
134 134
     mock_logger *test_logger = new mock_logger;
135
-    configuration.logger = logger(test_logger);
135
+    configuration.logger = logger(std::shared_ptr<logger_ifc>(test_logger));
136 136
     dual_control dc(create_dual_control(configuration));
137 137
     pam_handle_t *handle(0);
138 138
     std::vector<const std::string> arguments;
... ...
@@ -155,7 +155,7 @@ int logs_authentication_failure() {
155 155
     configuration.validator = validator(new fake_validator(user, "not the received token"));
156 156
     configuration.conversations = conversations(new fake_conversations(user, token));
157 157
     mock_logger *test_logger = new mock_logger;
158
-    configuration.logger = logger(test_logger);
158
+    configuration.logger = logger(std::shared_ptr<logger_ifc>(test_logger));
159 159
     dual_control dc(create_dual_control(configuration));
160 160
     pam_handle_t *handle(0);
161 161
     std::vector<const std::string> arguments;
... ...
@@ -9,6 +9,16 @@ class logger_ifc {
9 9
         virtual ~logger_ifc() {}
10 10
         virtual void log(int result, const std::string &user_name, const std::string &token) {};
11 11
 };
12
-typedef std::shared_ptr<logger_ifc> logger;
12
+
13
+class logger : public logger_ifc {
14
+    private:
15
+        std::shared_ptr<logger_ifc> delegate_;
16
+    public:
17
+        logger(const std::shared_ptr<logger_ifc> &delegate) : delegate_(delegate) {}
18
+        logger() : logger(std::shared_ptr<logger_ifc>(new logger_ifc)) {}
19
+        void log(int result, const std::string &user_name, const std::string &token) {
20
+            delegate_->log(result, user_name, token);
21
+        }
22
+};
13 23
 
14 24
 #endif