@@ -76,9 +76,73 @@ func (m *Manager) SaveUpstreamServer(serverConfig *config.ServerConfig) error {
7676 Updated : time .Now (),
7777 }
7878
79+ // Include OAuth tokens if present
80+ if serverConfig .OAuth != nil && serverConfig .OAuth .TokenStorage != nil {
81+ record .OAuthTokens = & OAuthTokenRecord {
82+ AccessToken : serverConfig .OAuth .TokenStorage .AccessToken ,
83+ RefreshToken : serverConfig .OAuth .TokenStorage .RefreshToken ,
84+ ExpiresAt : serverConfig .OAuth .TokenStorage .ExpiresAt ,
85+ TokenType : serverConfig .OAuth .TokenStorage .TokenType ,
86+ Scope : serverConfig .OAuth .TokenStorage .Scope ,
87+ Updated : time .Now (),
88+ }
89+ }
90+
7991 return m .db .SaveUpstream (record )
8092}
8193
94+ // SaveOAuthTokens saves OAuth tokens for a specific upstream server
95+ func (m * Manager ) SaveOAuthTokens (serverName string , tokens * config.TokenStorage ) error {
96+ m .mu .Lock ()
97+ defer m .mu .Unlock ()
98+
99+ // Get existing upstream record
100+ record , err := m .db .GetUpstream (serverName )
101+ if err != nil {
102+ return fmt .Errorf ("failed to get upstream server: %w" , err )
103+ }
104+
105+ // Update OAuth tokens
106+ if tokens != nil {
107+ record .OAuthTokens = & OAuthTokenRecord {
108+ AccessToken : tokens .AccessToken ,
109+ RefreshToken : tokens .RefreshToken ,
110+ ExpiresAt : tokens .ExpiresAt ,
111+ TokenType : tokens .TokenType ,
112+ Scope : tokens .Scope ,
113+ Updated : time .Now (),
114+ }
115+ } else {
116+ record .OAuthTokens = nil
117+ }
118+
119+ record .Updated = time .Now ()
120+ return m .db .SaveUpstream (record )
121+ }
122+
123+ // LoadOAuthTokens loads OAuth tokens for a specific upstream server
124+ func (m * Manager ) LoadOAuthTokens (serverName string ) (* config.TokenStorage , error ) {
125+ m .mu .RLock ()
126+ defer m .mu .RUnlock ()
127+
128+ record , err := m .db .GetUpstream (serverName )
129+ if err != nil {
130+ return nil , fmt .Errorf ("failed to get upstream server: %w" , err )
131+ }
132+
133+ if record .OAuthTokens == nil {
134+ return nil , nil // No tokens stored
135+ }
136+
137+ return & config.TokenStorage {
138+ AccessToken : record .OAuthTokens .AccessToken ,
139+ RefreshToken : record .OAuthTokens .RefreshToken ,
140+ ExpiresAt : record .OAuthTokens .ExpiresAt ,
141+ TokenType : record .OAuthTokens .TokenType ,
142+ Scope : record .OAuthTokens .Scope ,
143+ }, nil
144+ }
145+
82146// GetUpstreamServer retrieves an upstream server by name
83147func (m * Manager ) GetUpstreamServer (name string ) (* config.ServerConfig , error ) {
84148 m .mu .RLock ()
@@ -89,7 +153,7 @@ func (m *Manager) GetUpstreamServer(name string) (*config.ServerConfig, error) {
89153 return nil , err
90154 }
91155
92- return & config.ServerConfig {
156+ serverConfig := & config.ServerConfig {
93157 Name : record .Name ,
94158 URL : record .URL ,
95159 Protocol : record .Protocol ,
@@ -101,7 +165,23 @@ func (m *Manager) GetUpstreamServer(name string) (*config.ServerConfig, error) {
101165 Quarantined : record .Quarantined ,
102166 Created : record .Created ,
103167 Updated : record .Updated ,
104- }, nil
168+ }
169+
170+ // Load OAuth tokens if present
171+ if record .OAuthTokens != nil {
172+ if serverConfig .OAuth == nil {
173+ serverConfig .OAuth = & config.OAuthConfig {}
174+ }
175+ serverConfig .OAuth .TokenStorage = & config.TokenStorage {
176+ AccessToken : record .OAuthTokens .AccessToken ,
177+ RefreshToken : record .OAuthTokens .RefreshToken ,
178+ ExpiresAt : record .OAuthTokens .ExpiresAt ,
179+ TokenType : record .OAuthTokens .TokenType ,
180+ Scope : record .OAuthTokens .Scope ,
181+ }
182+ }
183+
184+ return serverConfig , nil
105185}
106186
107187// ListUpstreamServers returns all upstream servers
0 commit comments