diff options
-rw-r--r-- | src/handlers.rs | 2 | ||||
-rw-r--r-- | src/schema.rs | 41 | ||||
-rw-r--r-- | tests/route_tests.rs | 4 | ||||
-rw-r--r-- | tests/schema_tests.rs | 28 |
4 files changed, 55 insertions, 20 deletions
diff --git a/src/handlers.rs b/src/handlers.rs index e34abbe..b9df931 100644 --- a/src/handlers.rs +++ b/src/handlers.rs | |||
@@ -39,7 +39,7 @@ pub async fn authenticate_user( | |||
39 | debug!("POST request to /register, authenticate_user"); | 39 | debug!("POST request to /register, authenticate_user"); |
40 | let provided_id = request.student_id.clone(); | 40 | let provided_id = request.student_id.clone(); |
41 | 41 | ||
42 | let priv_student_id = match MetuId::new(request.student_id) { | 42 | let priv_student_id = match MetuId::new(request.student_id, request.passwd) { |
43 | Some(id) => id, | 43 | Some(id) => id, |
44 | None => { | 44 | None => { |
45 | let res_json = warp::reply::json(&GradeCoinResponse { | 45 | let res_json = warp::reply::json(&GradeCoinResponse { |
diff --git a/src/schema.rs b/src/schema.rs index 55e46c0..65150c1 100644 --- a/src/schema.rs +++ b/src/schema.rs | |||
@@ -132,22 +132,47 @@ pub struct User { | |||
132 | #[derive(Serialize, Deserialize, Debug, PartialEq)] | 132 | #[derive(Serialize, Deserialize, Debug, PartialEq)] |
133 | pub struct MetuId { | 133 | pub struct MetuId { |
134 | id: String, | 134 | id: String, |
135 | passwd: String, | ||
135 | } | 136 | } |
136 | 137 | ||
137 | // TODO: this will arrive encrypted <13-04-21, yigit> // | 138 | // TODO: this will arrive encrypted <13-04-21, yigit> // |
138 | #[derive(Serialize, Deserialize, Debug, PartialEq)] | 139 | #[derive(Serialize, Deserialize, Debug, PartialEq)] |
139 | pub struct AuthRequest { | 140 | pub struct AuthRequest { |
140 | pub student_id: String, | 141 | pub student_id: String, |
142 | pub passwd: String, | ||
141 | pub public_key: String, | 143 | pub public_key: String, |
142 | } | 144 | } |
143 | 145 | ||
144 | lazy_static! { | 146 | lazy_static! { |
145 | static ref OUR_STUDENTS: HashSet<&'static str> = { | 147 | static ref OUR_STUDENTS: HashSet<(&'static str, &'static str)> = { |
146 | [ | 148 | [ |
147 | "e254275", "e223687", "e211024", "e209888", "e223725", "e209362", "e209898", "e230995", | 149 | ("e254275", "DtNX1qk4YF4saRH"), |
148 | "e223743", "e223747", "e223749", "e223751", "e188126", "e209913", "e203608", "e233013", | 150 | ("e223687", "cvFEs4XLjuGBD1v"), |
149 | "e216982", "e217185", "e223780", "e194931", "e223783", "e254550", "e217203", "e217477", | 151 | ("e211024", "voQAcxiKJmEXYRT"), |
150 | "e223786", "e231060", "e223795", | 152 | ("e209888", "O75dli6AQtz2tUi"), |
153 | ("e223725", "xXuTD3Y4tyrv2Jz"), | ||
154 | ("e209362", "N7wGm5XU5zVWOWu"), | ||
155 | ("e209898", "aKBFfB8fZMq8pVn"), | ||
156 | ("e230995", "TgcHGlqeFhQGx42"), | ||
157 | ("e223743", "YVWVSWuIHplJk9C"), | ||
158 | ("e223747", "8LAeHrsjnwXh59Q"), | ||
159 | ("e223749", "HMFeJqVOzwCPHbc"), | ||
160 | ("e223751", "NjMsxmtmy2VOwMW"), | ||
161 | ("e188126", "QibuPdV2gXfsVJW"), | ||
162 | ("e209913", "kMxJvl2vHSWCy4A"), | ||
163 | ("e203608", "mfkkR0MWurk6Rp1"), | ||
164 | ("e233013", "GCqHxdOaDj2pWXx"), | ||
165 | ("e216982", "2Z0xmgCStnj5qg5"), | ||
166 | ("e217185", "BcaZNlzlhPph7A3"), | ||
167 | ("e223780", "2KvVxKUQaA9H4sn"), | ||
168 | ("e194931", "hsC0Wb8PQ5vzwdQ"), | ||
169 | ("e223783", "ETUJA3kt1QYvJai"), | ||
170 | ("e254550", "rPRjX0A4NefvKWi"), | ||
171 | ("e217203", "lN3IWhGyCrGfkk5"), | ||
172 | ("e217477", "O9xlMaa7LanC82w"), | ||
173 | ("e223786", "UxI6czykJfp9T9N"), | ||
174 | ("e231060", "VJgziofQQPCoisH"), | ||
175 | ("e223795", "pmcTCKox99NFsqp"), | ||
151 | ] | 176 | ] |
152 | .iter() | 177 | .iter() |
153 | .cloned() | 178 | .cloned() |
@@ -162,9 +187,9 @@ impl fmt::Display for MetuId { | |||
162 | } | 187 | } |
163 | 188 | ||
164 | impl MetuId { | 189 | impl MetuId { |
165 | pub fn new(id: String) -> Option<Self> { | 190 | pub fn new(id: String, pwd: String) -> Option<Self> { |
166 | if OUR_STUDENTS.contains(&*id) { | 191 | if OUR_STUDENTS.contains(&(&*id, &*pwd)) { |
167 | Some(MetuId { id: id }) | 192 | Some(MetuId { id: id, passwd: pwd }) |
168 | } else { | 193 | } else { |
169 | None | 194 | None |
170 | } | 195 | } |
diff --git a/tests/route_tests.rs b/tests/route_tests.rs index 7c0651f..5c2d891 100644 --- a/tests/route_tests.rs +++ b/tests/route_tests.rs | |||
@@ -12,7 +12,7 @@ mod tests { | |||
12 | db.users.write().insert( | 12 | db.users.write().insert( |
13 | "mock_transaction_source".to_owned(), | 13 | "mock_transaction_source".to_owned(), |
14 | User { | 14 | User { |
15 | user_id: MetuId::new("e254275".to_owned()).unwrap(), | 15 | user_id: MetuId::new("e254275".to_owned(), "DtNX1qk4YF4saRH".to_owned()).unwrap(), |
16 | public_key: "-----BEGIN PUBLIC KEY----- | 16 | public_key: "-----BEGIN PUBLIC KEY----- |
17 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4nU0G4WjkmcQUx0hq6LQ | 17 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4nU0G4WjkmcQUx0hq6LQ |
18 | uV5Q+ACmUFL/OjoYMDwC/O/6pCd1UZgCfgHN2xEffDPznzcTn8OiFRxr4oWyBiny | 18 | uV5Q+ACmUFL/OjoYMDwC/O/6pCd1UZgCfgHN2xEffDPznzcTn8OiFRxr4oWyBiny |
@@ -56,6 +56,7 @@ sQIDAQAB | |||
56 | fn priviliged_mocked_user() -> AuthRequest { | 56 | fn priviliged_mocked_user() -> AuthRequest { |
57 | AuthRequest { | 57 | AuthRequest { |
58 | student_id: String::from("e254275"), | 58 | student_id: String::from("e254275"), |
59 | passwd: String::from("DtNX1qk4YF4saRH"), | ||
59 | public_key: "NOT IMPLEMENTED".to_owned(), | 60 | public_key: "NOT IMPLEMENTED".to_owned(), |
60 | } | 61 | } |
61 | } | 62 | } |
@@ -64,6 +65,7 @@ sQIDAQAB | |||
64 | fn unpriviliged_mocked_user() -> AuthRequest { | 65 | fn unpriviliged_mocked_user() -> AuthRequest { |
65 | AuthRequest { | 66 | AuthRequest { |
66 | student_id: String::from("foobarbaz"), | 67 | student_id: String::from("foobarbaz"), |
68 | passwd: String::from("DtNX1qk4YF4saRH"), | ||
67 | public_key: "NOT IMPLEMENTED".to_owned(), | 69 | public_key: "NOT IMPLEMENTED".to_owned(), |
68 | } | 70 | } |
69 | } | 71 | } |
diff --git a/tests/schema_tests.rs b/tests/schema_tests.rs index c1880b9..4240a5f 100644 --- a/tests/schema_tests.rs +++ b/tests/schema_tests.rs | |||
@@ -192,7 +192,7 @@ mod tests { | |||
192 | #[test] | 192 | #[test] |
193 | fn user_serialize_correctly() { | 193 | fn user_serialize_correctly() { |
194 | let user = User { | 194 | let user = User { |
195 | user_id: MetuId::new("e254275".to_owned()).unwrap(), | 195 | user_id: MetuId::new("e254275".to_owned(), "DtNX1qk4YF4saRH".to_owned()).unwrap(), |
196 | public_key: "public_key".to_owned(), | 196 | public_key: "public_key".to_owned(), |
197 | balance: 0 | 197 | balance: 0 |
198 | }; | 198 | }; |
@@ -202,9 +202,11 @@ mod tests { | |||
202 | &[ | 202 | &[ |
203 | Token::Struct{name: "User", len: 3}, | 203 | Token::Struct{name: "User", len: 3}, |
204 | Token::String("user_id"), | 204 | Token::String("user_id"), |
205 | Token::Struct {name: "MetuId", len: 1}, | 205 | Token::Struct {name: "MetuId", len: 2}, |
206 | Token::String("id"), | 206 | Token::String("id"), |
207 | Token::String("e254275"), | 207 | Token::String("e254275"), |
208 | Token::String("passwd"), | ||
209 | Token::String("DtNX1qk4YF4saRH"), | ||
208 | Token::StructEnd, | 210 | Token::StructEnd, |
209 | Token::String("public_key"), | 211 | Token::String("public_key"), |
210 | Token::String("public_key"), | 212 | Token::String("public_key"), |
@@ -218,11 +220,11 @@ mod tests { | |||
218 | #[test] | 220 | #[test] |
219 | fn user_deserialize_correctly() { | 221 | fn user_deserialize_correctly() { |
220 | let expected_user = User { | 222 | let expected_user = User { |
221 | user_id: MetuId::new("e254275".to_owned()).unwrap(), | 223 | user_id: MetuId::new("e254275".to_owned(), "DtNX1qk4YF4saRH".to_owned()).unwrap(), |
222 | public_key: "public_key".to_owned(), | 224 | public_key: "public_key".to_owned(), |
223 | balance: 0 | 225 | balance: 0 |
224 | }; | 226 | }; |
225 | let data = r#"{"user_id":{"id":"e254275"},"public_key":"public_key","balance":0}"#; | 227 | let data = r#"{"user_id":{"id":"e254275","passwd":"DtNX1qk4YF4saRH"},"public_key":"public_key","balance":0}"#; |
226 | let user: User = serde_json::from_str(data).unwrap(); | 228 | let user: User = serde_json::from_str(data).unwrap(); |
227 | 229 | ||
228 | assert_eq!(user, expected_user); | 230 | assert_eq!(user, expected_user); |
@@ -231,14 +233,16 @@ mod tests { | |||
231 | 233 | ||
232 | #[test] | 234 | #[test] |
233 | fn metu_id_serialize_correctly() { | 235 | fn metu_id_serialize_correctly() { |
234 | let metu_id = MetuId::new ("e254275".to_owned()).unwrap(); | 236 | let metu_id = MetuId::new ("e254275".to_owned(), "DtNX1qk4YF4saRH".to_owned()).unwrap(); |
235 | 237 | ||
236 | assert_tokens( | 238 | assert_tokens( |
237 | &metu_id, | 239 | &metu_id, |
238 | &[ | 240 | &[ |
239 | Token::Struct{name: "MetuId", len: 1}, | 241 | Token::Struct{name: "MetuId", len: 2}, |
240 | Token::String("id"), | 242 | Token::String("id"), |
241 | Token::String("e254275"), | 243 | Token::String("e254275"), |
244 | Token::String("passwd"), | ||
245 | Token::String("DtNX1qk4YF4saRH"), | ||
242 | Token::StructEnd, | 246 | Token::StructEnd, |
243 | ] | 247 | ] |
244 | ) | 248 | ) |
@@ -246,8 +250,8 @@ mod tests { | |||
246 | 250 | ||
247 | #[test] | 251 | #[test] |
248 | fn metu_id_deserialize_correctly() { | 252 | fn metu_id_deserialize_correctly() { |
249 | let expected_metu_id = MetuId::new ("e254275".to_owned()).unwrap(); | 253 | let expected_metu_id = MetuId::new ("e254275".to_owned(), "DtNX1qk4YF4saRH".to_owned()).unwrap(); |
250 | let data = r#"{"id":"e254275"}"#; | 254 | let data = r#"{"id":"e254275","passwd":"DtNX1qk4YF4saRH"}"#; |
251 | let metu_id: MetuId = serde_json::from_str(data).unwrap(); | 255 | let metu_id: MetuId = serde_json::from_str(data).unwrap(); |
252 | 256 | ||
253 | assert_eq!(metu_id, expected_metu_id); | 257 | assert_eq!(metu_id, expected_metu_id); |
@@ -257,15 +261,18 @@ mod tests { | |||
257 | fn auth_request_serialize_correctly() { | 261 | fn auth_request_serialize_correctly() { |
258 | let auth_request = AuthRequest { | 262 | let auth_request = AuthRequest { |
259 | student_id: "e254275".to_owned(), | 263 | student_id: "e254275".to_owned(), |
264 | passwd: "DtNX1qk4YF4saRH".to_owned(), | ||
260 | public_key: "public_key".to_owned() | 265 | public_key: "public_key".to_owned() |
261 | }; | 266 | }; |
262 | 267 | ||
263 | assert_tokens( | 268 | assert_tokens( |
264 | &auth_request, | 269 | &auth_request, |
265 | &[ | 270 | &[ |
266 | Token::Struct{name: "AuthRequest", len: 2}, | 271 | Token::Struct{name: "AuthRequest", len: 3}, |
267 | Token::String("student_id"), | 272 | Token::String("student_id"), |
268 | Token::String("e254275"), | 273 | Token::String("e254275"), |
274 | Token::String("passwd"), | ||
275 | Token::String("DtNX1qk4YF4saRH"), | ||
269 | Token::String("public_key"), | 276 | Token::String("public_key"), |
270 | Token::String("public_key"), | 277 | Token::String("public_key"), |
271 | Token::StructEnd, | 278 | Token::StructEnd, |
@@ -277,9 +284,10 @@ mod tests { | |||
277 | fn auth_request_deserialize_correctly() { | 284 | fn auth_request_deserialize_correctly() { |
278 | let expected_auth_request = AuthRequest { | 285 | let expected_auth_request = AuthRequest { |
279 | student_id: "e254275".to_owned(), | 286 | student_id: "e254275".to_owned(), |
287 | passwd: "DtNX1qk4YF4saRH".to_owned(), | ||
280 | public_key: "public_key".to_owned() | 288 | public_key: "public_key".to_owned() |
281 | }; | 289 | }; |
282 | let data = r#"{"student_id":"e254275","public_key":"public_key"}"#; | 290 | let data = r#"{"student_id":"e254275","passwd":"DtNX1qk4YF4saRH","public_key":"public_key"}"#; |
283 | let auth_request: AuthRequest = serde_json::from_str(data).unwrap(); | 291 | let auth_request: AuthRequest = serde_json::from_str(data).unwrap(); |
284 | 292 | ||
285 | assert_eq!(auth_request, expected_auth_request); | 293 | assert_eq!(auth_request, expected_auth_request); |