flatland_cli/
auth_context.rs1use flatland_protocol::AuthCredential;
4
5use crate::config::{default_api_base, SessionConfig};
6
7#[derive(Debug, Clone)]
9pub struct PlayAuth {
10 pub api_base: String,
11 pub bearer: String,
12 pub kind: PlayAuthKind,
13}
14
15#[derive(Debug, Clone, Copy, PartialEq, Eq)]
16pub enum PlayAuthKind {
17 Session,
18 ApiToken,
19}
20
21impl PlayAuth {
22 #[allow(dead_code)]
23 pub fn game_credential(&self, character_id: uuid::Uuid) -> AuthCredential {
24 match self.kind {
25 PlayAuthKind::Session => AuthCredential::Session {
26 token: self.bearer.clone(),
27 },
28 PlayAuthKind::ApiToken => AuthCredential::ApiToken {
29 token: self.bearer.clone(),
30 character_id,
31 },
32 }
33 }
34}
35
36pub fn credentials_available() -> bool {
38 if std::env::var("FLATLAND_API_TOKEN")
39 .map(|t| !t.is_empty())
40 .unwrap_or(false)
41 {
42 return true;
43 }
44 if std::env::var("FLATLAND_SESSION_TOKEN")
45 .map(|t| !t.is_empty())
46 .unwrap_or(false)
47 {
48 return true;
49 }
50 SessionConfig::path()
51 .ok()
52 .map(|p| p.is_file())
53 .unwrap_or(false)
54}
55
56pub fn load_play_auth() -> anyhow::Result<PlayAuth> {
57 let api_base = default_api_base();
58
59 if let Ok(token) = std::env::var("FLATLAND_API_TOKEN") {
60 if !token.is_empty() {
61 return Ok(PlayAuth {
62 api_base,
63 bearer: token,
64 kind: PlayAuthKind::ApiToken,
65 });
66 }
67 }
68
69 if let Ok(token) = std::env::var("FLATLAND_SESSION_TOKEN") {
70 if !token.is_empty() {
71 return Ok(PlayAuth {
72 api_base,
73 bearer: token,
74 kind: PlayAuthKind::Session,
75 });
76 }
77 }
78
79 let session = SessionConfig::load()?;
80 Ok(PlayAuth {
81 api_base: session.api_base,
82 bearer: session.session_token,
83 kind: PlayAuthKind::Session,
84 })
85}