client: reqwest::blocking::Client,
accounts: HashMap<String, Account>,
statuses: HashMap<String, Status>,
+ permit_write: bool,
}
+#[derive(Debug)]
pub enum ClientError {
InternalError(String), // message
UrlParseError(String, String), // url, message
client: reqwest::blocking::Client::new(),
accounts: HashMap::new(),
statuses: HashMap::new(),
+ permit_write: false,
})
}
- fn api_request(&self, method: reqwest::Method, url_suffix: &str)
- -> Result<(String, reqwest::blocking::RequestBuilder),
- ClientError> {
+ pub fn set_writable(&mut self, permit: bool) {
+ self.permit_write = permit;
+ }
+
+ fn api_request(&self, method: reqwest::Method, url_suffix: &str) ->
+ Result<(String, reqwest::blocking::RequestBuilder), ClientError>
+ {
+ if method != reqwest::Method::GET && !self.permit_write {
+ return Err(ClientError::InternalError(
+ "Non-GET request attempted in readonly mode".to_string()));
+ }
+
let urlstr = self.auth.instance_url.clone() + "/api/v1/" + url_suffix;
let url = match Url::parse(&urlstr) {
Ok(url) => Ok(url),