Added authorization (shitcode)
This commit is contained in:
parent
7f08163710
commit
501899bc02
|
@ -0,0 +1,69 @@
|
||||||
|
use std::fs::File;
|
||||||
|
use std::io::{Read, Write};
|
||||||
|
|
||||||
|
fn write(data: Vec<i64>) -> Result<(), Box<dyn std::error::Error>>{
|
||||||
|
match File::create("auth") {
|
||||||
|
Ok(mut file) => {
|
||||||
|
for num in data {
|
||||||
|
file.write_all(format!("{}\n", num).as_bytes())?; }
|
||||||
|
}
|
||||||
|
Err(_) => {}
|
||||||
|
}
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
fn read() -> Result<Vec<i64>, Box<dyn std::error::Error>>{
|
||||||
|
let mut file = File::open("auth")?;
|
||||||
|
let mut content = String::new();
|
||||||
|
file.read_to_string(&mut content)?;
|
||||||
|
let ids: Vec<i64> = content
|
||||||
|
.lines()
|
||||||
|
.filter_map(|line| line.parse().ok())
|
||||||
|
.collect();
|
||||||
|
Ok(ids)
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn add(id: i64) -> Result<(), Box<dyn std::error::Error>>{
|
||||||
|
if check(id) {} else {
|
||||||
|
match read() {
|
||||||
|
Ok(ids) => {
|
||||||
|
let mut array: Vec<i64> = ids;
|
||||||
|
array.push(id);
|
||||||
|
write(array)?;
|
||||||
|
}
|
||||||
|
Err(e) => {
|
||||||
|
println!("Error reading from file: {}, recreating auth", e);
|
||||||
|
init(id)?;
|
||||||
|
}
|
||||||
|
}}
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn check(id: i64) -> bool {
|
||||||
|
let mut valid: Option<bool> = None;
|
||||||
|
match read() {
|
||||||
|
Ok(ids) => {
|
||||||
|
let array: &[i64] = ids.as_slice();
|
||||||
|
if array.contains(&id) {
|
||||||
|
valid = Some(true);
|
||||||
|
} else {
|
||||||
|
valid = Some(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Err(e) => {
|
||||||
|
println!("Error reading from file: {}, recreating auth", e);
|
||||||
|
init(id).expect("init");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return valid.unwrap();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
fn init(id: i64) -> Result<(), Box<dyn std::error::Error>> {
|
||||||
|
let mut file = File::create("auth")?;
|
||||||
|
let vec: Option<Vec<i64>> = Some(Vec::from([id]));
|
||||||
|
for num in vec.unwrap() {
|
||||||
|
file.write_all(format!("{}\n", num).as_bytes())?;
|
||||||
|
}
|
||||||
|
Ok(())
|
||||||
|
}
|
|
@ -1,6 +1,7 @@
|
||||||
mod telegram;
|
mod telegram;
|
||||||
mod build;
|
mod build;
|
||||||
mod search;
|
mod search;
|
||||||
|
mod authorization;
|
||||||
|
|
||||||
#[tokio::main]
|
#[tokio::main]
|
||||||
async fn main() {
|
async fn main() {
|
||||||
|
|
|
@ -2,6 +2,7 @@ use teloxide::{prelude::*, utils::command::BotCommands};
|
||||||
use crate::build::{clone, copy, build, delete, repo_add};
|
use crate::build::{clone, copy, build, delete, repo_add};
|
||||||
use crate::search;
|
use crate::search;
|
||||||
use std::env;
|
use std::env;
|
||||||
|
use crate::authorization::{add, check};
|
||||||
|
|
||||||
pub async fn main(bot: Bot){
|
pub async fn main(bot: Bot){
|
||||||
Commands::repl(bot, answer).await;
|
Commands::repl(bot, answer).await;
|
||||||
|
@ -13,11 +14,12 @@ enum Commands{
|
||||||
#[command(description = "Build package.")]
|
#[command(description = "Build package.")]
|
||||||
Upload(String),
|
Upload(String),
|
||||||
#[command(description = "Search packages", parse_with = "split")]
|
#[command(description = "Search packages", parse_with = "split")]
|
||||||
Search{ pkg: String, num: u8 }
|
Search{ pkg: String, num: u8 },
|
||||||
|
Auth(String)
|
||||||
}
|
}
|
||||||
async fn answer(bot: Bot, msg: Message, cmd: Commands) -> ResponseResult<()> {
|
async fn answer(bot: Bot, msg: Message, cmd: Commands) -> ResponseResult<()> {
|
||||||
match cmd {
|
match cmd {
|
||||||
Commands::Upload(pkg) => {
|
Commands::Upload(pkg) => { if check(msg.chat.id.0) {
|
||||||
let default_dir = env::current_dir()?;
|
let default_dir = env::current_dir()?;
|
||||||
let pkg_dir = format!("pkgs/{}", pkg);
|
let pkg_dir = format!("pkgs/{}", pkg);
|
||||||
let repo_dir = format!("repo/");
|
let repo_dir = format!("repo/");
|
||||||
|
@ -55,11 +57,26 @@ async fn answer(bot: Bot, msg: Message, cmd: Commands) -> ResponseResult<()> {
|
||||||
};
|
};
|
||||||
bot.send_message(msg.chat.id, repo_add).await?;
|
bot.send_message(msg.chat.id, repo_add).await?;
|
||||||
env::set_current_dir(default_dir)?;
|
env::set_current_dir(default_dir)?;
|
||||||
|
} else { bot.send_message(msg.chat.id, "This bot is private, motherfucker.").await?; }
|
||||||
}
|
}
|
||||||
Commands::Search{pkg, num} => {
|
Commands::Search{pkg, num} => {
|
||||||
bot.send_message(msg.chat.id, search::search(pkg, num).await).await?;
|
bot.send_message(msg.chat.id, search::search(pkg, num).await).await?;
|
||||||
}
|
}
|
||||||
|
Commands::Auth(pass) => {
|
||||||
|
match env::var("PASS") {
|
||||||
|
Ok(value) => {
|
||||||
|
if pass == value {
|
||||||
|
bot.send_message(msg.chat.id, format!("Authorized!")).await?;
|
||||||
|
add(msg.chat.id.0).expect("add");
|
||||||
|
} else {
|
||||||
|
bot.send_message(msg.chat.id, format!("This bot is private, motherfucker.")).await?;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
Err(_) => {
|
||||||
|
bot.send_message(msg.chat.id, format!("The password variable is not set.")).await?;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue