Skip to content

Commit 03bb21a

Browse files
committed
Add login command to set API token
1 parent 61ff7a6 commit 03bb21a

4 files changed

Lines changed: 77 additions & 0 deletions

File tree

README.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,16 @@ On first run, a `default` alias pointing to `https://dash.openworkers.com/api/v1
4343

4444
## Commands
4545

46+
### Login
47+
48+
```bash
49+
# Set token on default alias
50+
ow login
51+
52+
# Set token on specific alias
53+
ow dev login
54+
```
55+
4656
### Workers
4757

4858
```bash

src/commands/login.rs

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
use crate::config::{AliasConfig, Config, ConfigError};
2+
use colored::Colorize;
3+
use std::io::{self, Write};
4+
5+
pub fn run(alias_name: &str) -> Result<(), ConfigError> {
6+
let mut config = Config::load()?;
7+
8+
// Get existing alias
9+
let existing = config
10+
.get_alias(alias_name)
11+
.ok_or_else(|| ConfigError::AliasNotFound(alias_name.to_string()))?;
12+
13+
// Must be an API alias
14+
let (url, insecure) = match existing {
15+
AliasConfig::Api { url, insecure, .. } => (url.clone(), *insecure),
16+
AliasConfig::Db { .. } => {
17+
eprintln!(
18+
"{} Alias '{}' is a database alias, not an API alias.",
19+
"Error:".red(),
20+
alias_name
21+
);
22+
return Ok(());
23+
}
24+
};
25+
26+
// Prompt for token
27+
print!("Enter API token: ");
28+
io::stdout().flush().unwrap();
29+
30+
let mut token = String::new();
31+
io::stdin().read_line(&mut token).unwrap();
32+
let token = token.trim().to_string();
33+
34+
if token.is_empty() {
35+
eprintln!("{} Token cannot be empty.", "Error:".red());
36+
return Ok(());
37+
}
38+
39+
// Update alias with token
40+
config.set_alias(
41+
alias_name,
42+
AliasConfig::api(url, Some(token), insecure),
43+
true,
44+
)?;
45+
46+
config.save()?;
47+
48+
println!(
49+
"{} Token saved for alias '{}'.",
50+
"Success:".green(),
51+
alias_name.bold()
52+
);
53+
54+
Ok(())
55+
}

src/commands/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
pub mod alias;
22
pub mod db;
3+
pub mod login;
34
pub mod workers;

src/main.rs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,9 @@ enum Commands {
3030
command: AliasCommand,
3131
},
3232

33+
/// Set API token for an alias
34+
Login,
35+
3336
/// Database operations (requires db alias)
3437
Db {
3538
#[command(subcommand)]
@@ -59,6 +62,7 @@ fn extract_alias_from_args() -> (Option<String>, Vec<String>) {
5962

6063
let known_commands = [
6164
"alias",
65+
"login",
6266
"db",
6367
"workers",
6468
"help",
@@ -144,6 +148,13 @@ async fn main() {
144148

145149
let result = match cli.command {
146150
Commands::Alias { command } => command.run().map_err(|e| e.to_string()),
151+
Commands::Login => (|| {
152+
let config = Config::load().map_err(|e| e.to_string())?;
153+
let alias_name = alias
154+
.or(config.default.clone())
155+
.ok_or("No alias specified and no default configured".to_string())?;
156+
commands::login::run(&alias_name).map_err(|e| e.to_string())
157+
})(),
147158
Commands::Db { command } => command.run(alias).await.map_err(|e| e.to_string()),
148159
Commands::Workers { command } => run_workers_command(alias, command).await,
149160
};

0 commit comments

Comments
 (0)