Browse code
adds user token supplier collaborator
Greg Wiley authored on 13/04/2017 16:35:56
Showing 5 changed files
Showing 5 changed files
... | ... |
@@ -5,14 +5,13 @@ |
5 | 5 |
|
6 | 6 |
#include "user.h" |
7 | 7 |
|
8 |
-class token { |
|
9 |
- std::string value_ |
|
8 |
+ |
|
9 |
+class user_token_supplier { |
|
10 | 10 |
public: |
11 |
- token(const std::string &value) : value_(value) {} |
|
12 |
- std::string value() { return value_; } |
|
13 |
-} |
|
11 |
+ virtual std::string token(const user_p user) = 0; |
|
12 |
+}; |
|
14 | 13 |
|
15 |
-shared_ptr<token> create_token(std::shared_ptr<user> user); |
|
14 |
+typedef std::shared_ptr<user_token_supplier> user_token_supplier_p; |
|
16 | 15 |
|
17 | 16 |
int validate_token(const char *user, const char *token); |
18 | 17 |
|
... | ... |
@@ -1,8 +1,16 @@ |
1 | 1 |
#include <string> |
2 |
+#include <iostream> |
|
2 | 3 |
|
3 | 4 |
#include "validator.h" |
4 | 5 |
|
5 | 6 |
bool validator::validate(const std::string &user_name, const std::string &token) { |
6 |
- return directory_->find_user(user_name) && token == "token"; |
|
7 |
+ user_p found_user = directory_->find_user(user_name); |
|
8 |
+ |
|
9 |
+ if (!found_user) { |
|
10 |
+ return false; |
|
11 |
+ } |
|
12 |
+ |
|
13 |
+ std::string user_token = user_token_supplier_->token(found_user); |
|
14 |
+ return user_token == token; |
|
7 | 15 |
} |
8 | 16 |
|
... | ... |
@@ -4,12 +4,16 @@ |
4 | 4 |
#include <string> |
5 | 5 |
|
6 | 6 |
#include "user.h" |
7 |
+#include "token.h" |
|
7 | 8 |
|
8 | 9 |
class validator { |
9 | 10 |
private: |
10 | 11 |
directory_p directory_; |
12 |
+ user_token_supplier_p user_token_supplier_; |
|
11 | 13 |
public: |
12 |
- validator(const directory_p &directory): directory_(directory) {} |
|
14 |
+ validator(const directory_p &directory, const user_token_supplier_p &user_token_supplier): |
|
15 |
+ directory_(directory), |
|
16 |
+ user_token_supplier_(user_token_supplier) {} |
|
13 | 17 |
bool validate(const std::string &user, const std::string &token); |
14 | 18 |
}; |
15 | 19 |
|
... | ... |
@@ -1,6 +1,7 @@ |
1 | 1 |
#include "validator.h" |
2 | 2 |
#include "user.h" |
3 | 3 |
#include "test_util.h" |
4 |
+#include "token.h" |
|
4 | 5 |
|
5 | 6 |
class fake_directory : public directory { |
6 | 7 |
private: |
... | ... |
@@ -19,13 +20,26 @@ class fake_directory : public directory { |
19 | 20 |
} |
20 | 21 |
}; |
21 | 22 |
|
23 |
+class fake_user_token_supplier : public user_token_supplier { |
|
24 |
+ private: |
|
25 |
+ std::string token_; |
|
26 |
+ public: |
|
27 |
+ fake_user_token_supplier(const std::string &token) : token_(token) {} |
|
28 |
+ fake_user_token_supplier() : token_("_NOT_A_TOKEN") {} |
|
29 |
+ virtual std::string token(const user_p user) { |
|
30 |
+ return token_; |
|
31 |
+ } |
|
32 |
+}; |
|
33 |
+ |
|
22 | 34 |
|
23 | 35 |
bool validator_validates() { |
24 | 36 |
|
25 |
- // given |
|
37 |
+ // given |
|
38 |
+ std::string token = "token"; |
|
39 |
+ user_token_supplier_p user_token_supplier(new fake_user_token_supplier(token)); |
|
26 | 40 |
std::string user_name = "msmith"; |
27 | 41 |
directory_p directory(new fake_directory(user_name)); |
28 |
- validator validator(directory); |
|
42 |
+ validator validator(directory, user_token_supplier); |
|
29 | 43 |
|
30 | 44 |
|
31 | 45 |
// when |
... | ... |
@@ -40,12 +54,14 @@ bool validator_validates() { |
40 | 54 |
bool validator_fails_unknown_user() { |
41 | 55 |
|
42 | 56 |
// given |
57 |
+ std::string token = "token"; |
|
58 |
+ user_token_supplier_p user_token_supplier(new fake_user_token_supplier(token)); |
|
43 | 59 |
directory_p directory(new fake_directory); |
44 |
- validator validator(directory); |
|
60 |
+ validator validator(directory, user_token_supplier); |
|
45 | 61 |
|
46 | 62 |
|
47 | 63 |
// when |
48 |
- bool actual = validator.validate("notuser", "token"); |
|
64 |
+ bool actual = validator.validate("notuser", token); |
|
49 | 65 |
|
50 | 66 |
|
51 | 67 |
// then |
... | ... |
@@ -56,13 +72,14 @@ bool validator_fails_unknown_user() { |
56 | 72 |
bool validator_fails_incorrect_token() { |
57 | 73 |
|
58 | 74 |
// given |
59 |
- std::string user_name = "user"; |
|
75 |
+ user_token_supplier_p user_token_supplier(new fake_user_token_supplier); |
|
76 |
+ std::string user_name = "msmith"; |
|
60 | 77 |
directory_p directory(new fake_directory(user_name)); |
61 |
- validator validator(directory); |
|
78 |
+ validator validator(directory, user_token_supplier); |
|
62 | 79 |
|
63 | 80 |
|
64 | 81 |
// when |
65 |
- bool actual = validator.validate(user_name, "nottoken"); |
|
82 |
+ bool actual = validator.validate(user_name, "token"); |
|
66 | 83 |
|
67 | 84 |
|
68 | 85 |
// then |
... | ... |
@@ -78,7 +95,6 @@ bool run_tests() { |
78 | 95 |
test(validator_fails_unknown_user); |
79 | 96 |
test(validator_fails_incorrect_token); |
80 | 97 |
succeed(); |
81 |
- |
|
82 | 98 |
} |
83 | 99 |
|
84 | 100 |
int main(int argc, char *argv[]) { |