Merge pull request #80 from crunchy-labs/feature/anonymous-login

Add anonymous login
This commit is contained in:
ByteDream 2022-12-16 21:06:37 +01:00 committed by GitHub
commit 50c520d660
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 20 additions and 6 deletions

View file

@ -78,6 +78,11 @@ You can pass your account via credentials (username & password) or refresh token
- ```shell - ```shell
$ crunchy --credentials "user:password" $ crunchy --credentials "user:password"
``` ```
- Anonymous
- Login without an account at all is also possible.
- ```shell
$ crunchy --anonymous
```
### Login ### Login
@ -89,6 +94,7 @@ $ crunchy --etp-rt "abcd1234-zyxw-9876-98zy-a1b2c3d4e5f6" login
``` ```
Once set, you do not need to provide `--etp-rt` / `--credentials` anymore when using the cli. Once set, you do not need to provide `--etp-rt` / `--credentials` anymore when using the cli.
This does not work if you've using this with `--anonymous`.
### Download ### Download

View file

@ -81,9 +81,8 @@ struct Verbosity {
#[derive(Debug, Parser)] #[derive(Debug, Parser)]
struct LoginMethod { struct LoginMethod {
#[arg(help = "Login with credentials (username or email and password)")]
#[arg( #[arg(
long_help = "Login with credentials (username or email and password). Must be provided as user:password" help = "Login with credentials (username or email and password). Must be provided as user:password"
)] )]
#[arg(long)] #[arg(long)]
credentials: Option<String>, credentials: Option<String>,
@ -93,6 +92,9 @@ struct LoginMethod {
)] )]
#[arg(long)] #[arg(long)]
etp_rt: Option<String>, etp_rt: Option<String>,
#[arg(help = "Login anonymously / without an account")]
#[arg(long, default_value_t = false)]
anonymous: bool,
} }
pub async fn cli_entrypoint() { pub async fn cli_entrypoint() {
@ -190,8 +192,12 @@ async fn crunchyroll_session(cli: &Cli) -> Result<Crunchyroll> {
let mut builder = Crunchyroll::builder(); let mut builder = Crunchyroll::builder();
builder.locale(cli.lang.clone().unwrap_or_else(system_locale)); builder.locale(cli.lang.clone().unwrap_or_else(system_locale));
let login_methods_count = cli.login_method.credentials.is_some() as u8
+ cli.login_method.etp_rt.is_some() as u8
+ cli.login_method.anonymous as u8;
let _progress_handler = progress!("Logging in"); let _progress_handler = progress!("Logging in");
if cli.login_method.credentials.is_none() && cli.login_method.etp_rt.is_none() { if login_methods_count == 0 {
if let Some(login_file_path) = cli::login::login_file_path() { if let Some(login_file_path) = cli::login::login_file_path() {
if login_file_path.exists() { if login_file_path.exists() {
let session = fs::read_to_string(login_file_path)?; let session = fs::read_to_string(login_file_path)?;
@ -207,9 +213,9 @@ async fn crunchyroll_session(cli: &Cli) -> Result<Crunchyroll> {
bail!("Could not read stored session ('{}')", session) bail!("Could not read stored session ('{}')", session)
} }
} }
bail!("Please use a login method ('--credentials' or '--etp_rt')") bail!("Please use a login method ('--credentials', '--etp-rt' or '--anonymous')")
} else if cli.login_method.credentials.is_some() && cli.login_method.etp_rt.is_some() { } else if login_methods_count > 1 {
bail!("Please use only one login method ('--credentials' or '--etp_rt')") bail!("Please use only one login method ('--credentials', '--etp-rt' or '--anonymous')")
} }
let crunchy = if let Some(credentials) = &cli.login_method.credentials { let crunchy = if let Some(credentials) = &cli.login_method.credentials {
@ -220,6 +226,8 @@ async fn crunchyroll_session(cli: &Cli) -> Result<Crunchyroll> {
} }
} else if let Some(etp_rt) = &cli.login_method.etp_rt { } else if let Some(etp_rt) = &cli.login_method.etp_rt {
builder.login_with_etp_rt(etp_rt).await? builder.login_with_etp_rt(etp_rt).await?
} else if cli.login_method.anonymous {
builder.login_anonymously().await?
} else { } else {
bail!("should never happen") bail!("should never happen")
}; };