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 | } |
