1mod error;
2pub(crate) mod http;
3mod instance;
4mod access_token;
5mod ssh;
6
7pub use error::*;
8use crate::access_token::AccessTokenApi;
9use crate::instance::InstanceApi;
10use crate::ssh::SshApi;
11
12pub use ssh::{UpdateSshKeyRequest, SshKeyStatus};
13pub use instance::{RequestCreateInstance, InstanceStatus};
14
15pub struct WebArenaIndigoApi {
16 client_id: String,
17 client_secret: String,
18 access_token: String,
19 issued_at: u32,
20 expires_in: u32,
21}
22
23impl WebArenaIndigoApi {
24 pub fn new<T: Into<String>, U: Into<String>>(client_id: T, client_secret: U) -> WebArenaIndigoApi {
25 let api = WebArenaIndigoApi {
26 client_id: client_id.into(),
27 client_secret: client_secret.into(),
28 access_token: "".to_string(),
29 issued_at: 0,
30 expires_in: 0,
31 };
32 api
33 }
34 pub async fn update_access_token(&mut self) -> Result<&str, WebArenaIndigoApiError> {
35 let res = AccessTokenApi::access_token_generate(self.client_id.as_str(), self.client_secret.as_str()).await?;
36 self.access_token = res.access_token.to_string();
37 self.issued_at = res.issued_at.to_string().parse().unwrap_or_default();
38 self.expires_in = res.expires_in.to_string().parse().unwrap_or_default();
39 Ok(self.access_token.as_str())
40 }
41
42 pub fn access_token(&self) -> &str {
43 self.access_token.as_str()
44 }
45 pub fn instance(&mut self) -> InstanceApi {
46 InstanceApi::new(self)
47 }
48 pub fn ssh(&mut self) -> SshApi {
49 SshApi::new(self)
50 }
51}
52
53pub(crate) trait IndigoApi<'a> {
54 fn new(api: &'a WebArenaIndigoApi) -> Self;
55 fn indigo(&self) -> &WebArenaIndigoApi;
56}