diff options
Diffstat (limited to 'src/db.rs')
-rw-r--r-- | src/db.rs | 39 |
1 files changed, 29 insertions, 10 deletions
@@ -14,13 +14,14 @@ use log::debug; | |||
14 | use parking_lot::RwLock; | 14 | use parking_lot::RwLock; |
15 | use std::{collections::HashMap, fs, io, path::PathBuf, sync::Arc}; | 15 | use std::{collections::HashMap, fs, io, path::PathBuf, sync::Arc}; |
16 | 16 | ||
17 | const PREAPPROVED_STU_FILENAME: &str = "students.csv"; | ||
18 | |||
17 | #[derive(Debug, Clone, Default)] | 19 | #[derive(Debug, Clone, Default)] |
18 | pub struct Db { | 20 | pub struct Db { |
19 | pub blockchain: Arc<RwLock<Block>>, | 21 | pub blockchain: Arc<RwLock<Block>>, |
20 | pub pending_transactions: Arc<RwLock<HashMap<Id, Transaction>>>, | 22 | pub pending_transactions: Arc<RwLock<HashMap<Id, Transaction>>>, |
21 | pub users: Arc<RwLock<HashMap<Fingerprint, User>>>, | 23 | pub users: Arc<RwLock<HashMap<Fingerprint, User>>>, |
22 | approved_users: Vec<MetuId>, | 24 | preapproved_users: Vec<MetuId>, |
23 | // TODO: metu_ids or approved_users or something, metu_id struct <11-04-22, yigit> // | ||
24 | } | 25 | } |
25 | 26 | ||
26 | impl Db { | 27 | impl Db { |
@@ -37,13 +38,13 @@ impl Db { | |||
37 | } | 38 | } |
38 | 39 | ||
39 | let users: HashMap<Fingerprint, User> = get_friendly_users(); | 40 | let users: HashMap<Fingerprint, User> = get_friendly_users(); |
40 | let approved_users = read_approved_users(); | 41 | let preapproved_users = read_approved_users(); |
41 | 42 | ||
42 | Db { | 43 | Db { |
43 | blockchain: Arc::new(RwLock::new(Block::default())), | 44 | blockchain: Arc::new(RwLock::new(Block::default())), |
44 | pending_transactions: Arc::new(RwLock::new(HashMap::new())), | 45 | pending_transactions: Arc::new(RwLock::new(HashMap::new())), |
45 | users: Arc::new(RwLock::new(users)), | 46 | users: Arc::new(RwLock::new(users)), |
46 | approved_users, | 47 | preapproved_users, |
47 | } | 48 | } |
48 | } | 49 | } |
49 | 50 | ||
@@ -69,6 +70,16 @@ impl Db { | |||
69 | } | 70 | } |
70 | } | 71 | } |
71 | } | 72 | } |
73 | |||
74 | pub fn is_user_preapproved(&self, id: &Id, passwd: &String) -> bool { | ||
75 | for user in &self.preapproved_users { | ||
76 | if *user.get_id() == *id && *user.get_passwd() == *passwd { | ||
77 | return true; | ||
78 | } | ||
79 | } | ||
80 | |||
81 | false | ||
82 | } | ||
72 | } | 83 | } |
73 | 84 | ||
74 | fn last_block_content() -> Option<String> { | 85 | fn last_block_content() -> Option<String> { |
@@ -122,7 +133,7 @@ fn get_friendly_users() -> HashMap<Fingerprint, User> { | |||
122 | users.insert( | 133 | users.insert( |
123 | "cde48537ca2c28084ff560826d0e6388b7c57a51497a6cb56f397289e52ff41b".to_owned(), | 134 | "cde48537ca2c28084ff560826d0e6388b7c57a51497a6cb56f397289e52ff41b".to_owned(), |
124 | User { | 135 | User { |
125 | user_id: MetuId::new("friend_1".to_owned(), "not_used".to_owned()).unwrap(), | 136 | user_id: MetuId::new("friend_1".to_owned(), "not_used".to_owned()), |
126 | public_key: "not_used".to_owned(), | 137 | public_key: "not_used".to_owned(), |
127 | balance: 70, | 138 | balance: 70, |
128 | is_bot: true, | 139 | is_bot: true, |
@@ -132,7 +143,7 @@ fn get_friendly_users() -> HashMap<Fingerprint, User> { | |||
132 | users.insert( | 143 | users.insert( |
133 | "a1a38b5bae5866d7d998a9834229ec2f9db7a4fc8fb6f58b1115a96a446875ff".to_owned(), | 144 | "a1a38b5bae5866d7d998a9834229ec2f9db7a4fc8fb6f58b1115a96a446875ff".to_owned(), |
134 | User { | 145 | User { |
135 | user_id: MetuId::new("friend_2".to_owned(), "not_used".to_owned()).unwrap(), | 146 | user_id: MetuId::new("friend_2".to_owned(), "not_used".to_owned()), |
136 | public_key: "not_used".to_owned(), | 147 | public_key: "not_used".to_owned(), |
137 | balance: 20, | 148 | balance: 20, |
138 | is_bot: true, | 149 | is_bot: true, |
@@ -142,7 +153,7 @@ fn get_friendly_users() -> HashMap<Fingerprint, User> { | |||
142 | users.insert( | 153 | users.insert( |
143 | "4e048fd2a62f1307866086e803e9be43f78a702d5df10831fbf434e7663ae0e7".to_owned(), | 154 | "4e048fd2a62f1307866086e803e9be43f78a702d5df10831fbf434e7663ae0e7".to_owned(), |
144 | User { | 155 | User { |
145 | user_id: MetuId::new("friend_4".to_owned(), "not_used".to_owned()).unwrap(), | 156 | user_id: MetuId::new("friend_4".to_owned(), "not_used".to_owned()), |
146 | public_key: "not_used".to_owned(), | 157 | public_key: "not_used".to_owned(), |
147 | balance: 120, | 158 | balance: 120, |
148 | is_bot: true, | 159 | is_bot: true, |
@@ -152,7 +163,7 @@ fn get_friendly_users() -> HashMap<Fingerprint, User> { | |||
152 | users.insert( | 163 | users.insert( |
153 | "60e77101e76950a9b1830fa107fd2f8fc545255b3e0f14b6a7797cf9ee005f07".to_owned(), | 164 | "60e77101e76950a9b1830fa107fd2f8fc545255b3e0f14b6a7797cf9ee005f07".to_owned(), |
154 | User { | 165 | User { |
155 | user_id: MetuId::new("friend_4".to_owned(), "not_used".to_owned()).unwrap(), | 166 | user_id: MetuId::new("friend_4".to_owned(), "not_used".to_owned()), |
156 | public_key: "not_used".to_owned(), | 167 | public_key: "not_used".to_owned(), |
157 | balance: 40, | 168 | balance: 40, |
158 | is_bot: true, | 169 | is_bot: true, |
@@ -163,11 +174,19 @@ fn get_friendly_users() -> HashMap<Fingerprint, User> { | |||
163 | 174 | ||
164 | fn read_approved_users() -> Vec<MetuId> { | 175 | fn read_approved_users() -> Vec<MetuId> { |
165 | let mut approved_students: Vec<MetuId> = Vec::new(); | 176 | let mut approved_students: Vec<MetuId> = Vec::new(); |
166 | let contents = fs::read_to_string("students.csv").unwrap(); | 177 | let contents = fs::read_to_string(PREAPPROVED_STU_FILENAME).unwrap_or_else(|_| { |
178 | panic!( | ||
179 | "{}", | ||
180 | format!( | ||
181 | "Expected {} to load preapproved students", | ||
182 | PREAPPROVED_STU_FILENAME | ||
183 | ) | ||
184 | ) | ||
185 | }); | ||
167 | let mut reader = csv::Reader::from_reader(contents.as_bytes()); | 186 | let mut reader = csv::Reader::from_reader(contents.as_bytes()); |
168 | for student in reader.records() { | 187 | for student in reader.records() { |
169 | let student = student.unwrap(); | 188 | let student = student.unwrap(); |
170 | approved_students.push(MetuId::_new(student[0].to_owned(), student[1].to_owned())); | 189 | approved_students.push(MetuId::new(student[0].to_owned(), student[1].to_owned())); |
171 | } | 190 | } |
172 | approved_students | 191 | approved_students |
173 | } | 192 | } |