diff options
Diffstat (limited to 'src/verify.rs')
-rw-r--r-- | src/verify.rs | 161 |
1 files changed, 161 insertions, 0 deletions
diff --git a/src/verify.rs b/src/verify.rs new file mode 100644 index 0000000..8edb2f1 --- /dev/null +++ b/src/verify.rs @@ -0,0 +1,161 @@ +// zotapi - Rust wrapper for the Zot API as implemented by Hubzilla +// Copyright (C) 2023 Harald Eilertsen <haraldei@anduin.net> +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see <https://www.gnu.org/licenses/>. + +use crate::{client::Client, error::Error, XChan}; +use serde::Deserialize; +use std::convert::TryFrom; + +#[derive(Deserialize, Debug)] +pub struct Channel { + #[serde(alias = "channel_id")] + pub id: u32, + + #[serde(alias = "channel_account_id")] + pub account_id: u32, + + #[serde(alias = "channel_primary")] + pub primary: char, + + #[serde(alias = "channel_name")] + pub name: String, + + #[serde(alias = "channel_address")] + pub address: String, + + #[serde(alias = "channel_guid")] + pub guid: String, + + #[serde(alias = "channel_guid_sig")] + pub guid_sig: String, + + #[serde(alias = "channel_hash")] + pub hash: String, + + #[serde(alias = "channel_timezone")] + pub timezone: String, + + #[serde(alias = "channel_location")] + pub location: String, + + #[serde(alias = "channel_theme")] + pub theme: String, + + #[serde(alias = "channel_startpage")] + pub startpage: String, + + #[serde(alias = "channel_pubkey")] + pub pubkey: String, + + #[serde(alias = "channel_prvkey")] + pub prvkey: String, + + #[serde(alias = "channel_notifyflags")] + pub notifyflags: u32, + + #[serde(alias = "channel_pageflags")] + pub pageflags: u32, + + #[serde(alias = "channel_dirdate")] + pub dirdate: String, + + #[serde(alias = "channel_lastpost")] + pub lastpost: String, + + #[serde(alias = "channel_deleted")] + pub deleted: String, + + #[serde(alias = "channel_active")] + pub active: String, + + #[serde(alias = "channel_max_anon_mail")] + pub max_anon_mail: u32, + + #[serde(alias = "channel_max_friend_req")] + pub max_friend_req: u32, + + #[serde(alias = "channel_expire_days")] + pub expire_days: u32, + + #[serde(alias = "channel_passwd_reset")] + pub passwd_reset: String, + + #[serde(alias = "channel_default_group")] + pub default_group: String, + + #[serde(alias = "channel_allow_cid")] + pub allow_cid: String, + + #[serde(alias = "channel_allow_gid")] + pub allow_gid: String, + + #[serde(alias = "channel_deny_cid")] + pub deny_cid: String, + + #[serde(alias = "channel_deny_gid")] + pub deny_gid: String, + + #[serde(alias = "channel_removed")] + pub removed: u32, + + #[serde(alias = "channel_system")] + pub system: u32, + + #[serde(alias = "channel_moved")] + pub moved: String, + + #[serde(alias = "channel_password")] + pub password: String, + + #[serde(alias = "channel_salt")] + pub salt: String, + + #[serde(alias = "channel_portable_id")] + pub portable_id: String, + + #[serde(alias = "channel_xchan", skip)] + pub xchan: XChan, +} + +impl Channel { + pub fn z() -> ChannelRequest { + ChannelRequest::default() + } +} + +impl<'a> TryFrom<&'a str> for Channel { + type Error = Error; + + fn try_from(s: &'a str) -> Result<Self, Self::Error> { + Ok(serde_json::from_str(s)?) + } +} + +#[derive(Default)] +pub struct ChannelRequest; + +impl ChannelRequest { + pub async fn fetch_raw(&self, client: &Client) -> Result<String, Error> { + Ok(client.get("verify").send().await?.text().await?) + } + + pub async fn fetch(&self, client: &Client) -> Result<Channel, Error> { + let raw = self.fetch_raw(&client).await?; + let mut channel: Channel = serde_json::from_str(&raw)?; + channel.xchan = serde_json::from_str(&raw)?; + + Ok(channel) + } +} |