Class: Tastytrade::SessionManager

Inherits:
Object
  • Object
show all
Defined in:
lib/tastytrade/session_manager.rb

Overview

Manages session persistence and token storage

Constant Summary collapse

SESSION_KEY_PREFIX =
"session"
TOKEN_KEY_PREFIX =
"token"
REMEMBER_KEY_PREFIX =
"remember"

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(username:, environment: "production") ⇒ SessionManager

Returns a new instance of SessionManager.



16
17
18
19
# File 'lib/tastytrade/session_manager.rb', line 16

def initialize(username:, environment: "production")
  @username = username
  @environment = environment
end

Instance Attribute Details

#environmentObject (readonly)

Returns the value of attribute environment.



14
15
16
# File 'lib/tastytrade/session_manager.rb', line 14

def environment
  @environment
end

#usernameObject (readonly)

Returns the value of attribute username.



14
15
16
# File 'lib/tastytrade/session_manager.rb', line 14

def username
  @username
end

Instance Method Details

#clear_session!Object

Clear all stored session data



94
95
96
97
98
99
100
101
102
103
104
105
# File 'lib/tastytrade/session_manager.rb', line 94

def clear_session!
  FileStore.delete(token_key)
  FileStore.delete(remember_token_key)
  FileStore.delete(password_key)
  FileStore.delete(session_expiration_key)

  config = CLIConfig.new
  config.delete("current_username")
  config.delete("last_login")

  true
end

#load_sessionHash?

Load saved session if available

Returns:

  • (Hash, nil)

    Session data or nil if not found



56
57
58
59
60
61
62
63
64
65
66
67
68
# File 'lib/tastytrade/session_manager.rb', line 56

def load_session
  token = load_token
  return nil unless token

  {
    session_token: token,
    remember_token: load_remember_token,
    user_data: load_user_data,
    session_expiration: load_session_expiration,
    username: username,
    environment: environment
  }
end

#restore_sessionTastytrade::Session?

Create a new session from saved credentials

Returns:



73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
# File 'lib/tastytrade/session_manager.rb', line 73

def restore_session
  password = load_password
  remember_token = load_remember_token

  return nil unless password || remember_token

  session = Session.new(
    username: username,
    password: password,
    remember_token: remember_token,
    is_test: environment == "sandbox"
  )

  session.
  session
rescue StandardError => e
  warn "Failed to restore session: #{e.message}"
  nil
end

#save_session(session, password: nil, remember: false) ⇒ Object

Save session data securely

Parameters:

  • session (Tastytrade::Session)

    The session to save

  • password (String) (defaults to: nil)

    The password (only saved if remember is true)

  • remember (Boolean) (defaults to: false)

    Whether to save credentials for auto-login



26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/tastytrade/session_manager.rb', line 26

def save_session(session, password: nil, remember: false)
  # Always save the session token
  save_token(session.session_token)

  # Save session expiration if available
  save_session_expiration(session.session_expiration) if session.session_expiration

  # Save user data
  save_user_data(session.user) if session.user

  if remember && session.remember_token
    save_remember_token(session.remember_token)
    save_password(password) if password && FileStore.available?
  end

  # Save session metadata
  config = CLIConfig.new
  config.set("current_username", username)
  config.set("environment", environment)
  config.set("last_login", Time.now.to_s)

  true
rescue StandardError => e
  warn "Failed to save session: #{e.message}"
  false
end

#saved_credentials?Boolean

Check if we have stored credentials

Returns:

  • (Boolean)


108
109
110
# File 'lib/tastytrade/session_manager.rb', line 108

def saved_credentials?
  !load_password.nil? || !load_remember_token.nil?
end