currently a not very useful pleroma bot. may become something else later
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
manabu/src/main.rs

98 lines
2.7 KiB

#[macro_use]
extern crate log;
#[macro_use]
extern crate failure;
#[macro_use]
extern crate smart_default;
#[macro_use]
extern crate serde;
#[macro_use]
use elefren::{
helpers::cli,
prelude::*,
http_send::HttpSender,
};
use failure::Fallible;
use crate::bootstrap::Config;
use crate::store::Store;
mod bootstrap;
mod store;
type EleRegistratered = elefren::registration::Registered<HttpSender>;
/// Wrapper for the long tuple with Registration state
#[derive(Serialize,Deserialize,Debug)]
struct ElefrenRegistration {
parts: (String, String, String, String, Scopes, bool),
}
const KEY_OAUTH_REGISTRATION: &str = "elefren.registration";
const KEY_OAUTH_SESSION: &str = "elefren.session";
fn main() {
let config : Config = bootstrap::init().expect("error init config");
debug!("Loaded config: {:#?}", config);
let mut store = Store::from_file(&config.store);
store.set_autosave(true);
let registered = register(&mut store, &config);
let mastodon = open_session(&mut store, registered);
println!(
"{:?}",
mastodon
.get_home_timeline().expect("error get TL")
.items_iter()
.take(100)
.map(|item| {
format!("{}: {}", item.account.acct, item.content)
})
.collect::<Vec<String>>()
);
}
fn register(store : &mut Store, config : &Config) -> EleRegistratered {
match store.get::<ElefrenRegistration>(KEY_OAUTH_REGISTRATION) {
Some(reg) => {
info!("Loaded registration from store");
EleRegistratered::from_parts(
// this sucks
&reg.parts.0, &reg.parts.1, &reg.parts.2, &reg.parts.3, reg.parts.4, reg.parts.5
)
}
None => {
info!("Creating a new registration");
let registered = Registration::new(&config.instance)
.client_name("manabu")
.build().expect("error register");
store.put(KEY_OAUTH_REGISTRATION, ElefrenRegistration { parts : registered.clone().into_parts() });
registered
}
}
}
fn open_session(store : &mut Store, registered: EleRegistratered) -> Mastodon<HttpSender> {
match store.get::<elefren::Data>(KEY_OAUTH_SESSION) {
Some(data) => {
info!("Reusing saved authorization.");
let cli = Mastodon::from(data);
// TODO check if the session is live, somehow
cli
}
None => {
info!("Creating new authorization.");
let cli = cli::authenticate(registered).expect("error auth");
store.put(KEY_OAUTH_SESSION, cli.data.clone());
cli
}
}
}