feat: initial commit of vps-commander release v1.0.0
This commit is contained in:
@@ -0,0 +1,58 @@
|
||||
package mcp
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"net/http"
|
||||
)
|
||||
|
||||
// HandleOAuthMetadata serves /.well-known/oauth-authorization-server
|
||||
func (s *Server) HandleOAuthMetadata(w http.ResponseWriter, r *http.Request) {
|
||||
scheme := "https"
|
||||
host := r.Host
|
||||
meta := map[string]any{
|
||||
"issuer": fmt.Sprintf("%s://%s", scheme, host),
|
||||
"authorization_endpoint": fmt.Sprintf("%s://%s/oauth/authorize", scheme, host),
|
||||
"token_endpoint": fmt.Sprintf("%s://%s/oauth/token", scheme, host),
|
||||
"response_types_supported": []string{"code"},
|
||||
"grant_types_supported": []string{"authorization_code"},
|
||||
"code_challenge_methods_supported": []string{"S256", "plain"},
|
||||
"token_endpoint_auth_methods_supported": []string{"client_secret_post", "client_secret_basic", "none"},
|
||||
}
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
w.Header().Set("Access-Control-Allow-Origin", "*")
|
||||
_ = json.NewEncoder(w).Encode(meta)
|
||||
}
|
||||
|
||||
// HandleAuthorize handles the user/client authorization step
|
||||
func (s *Server) HandleAuthorize(w http.ResponseWriter, r *http.Request) {
|
||||
redirectURI := r.URL.Query().Get("redirect_uri")
|
||||
state := r.URL.Query().Get("state")
|
||||
|
||||
if redirectURI == "" {
|
||||
http.Error(w, "missing redirect_uri", http.StatusBadRequest)
|
||||
return
|
||||
}
|
||||
|
||||
code := "vps-commander-auth-code"
|
||||
target := fmt.Sprintf("%s?code=%s&state=%s", redirectURI, code, state)
|
||||
http.Redirect(w, r, target, http.StatusFound)
|
||||
}
|
||||
|
||||
// HandleToken exchanges code for bearer token
|
||||
func (s *Server) HandleToken(w http.ResponseWriter, r *http.Request) {
|
||||
token := ""
|
||||
if s.Auth != nil {
|
||||
token = s.Auth.Token()
|
||||
}
|
||||
|
||||
resp := map[string]any{
|
||||
"access_token": token,
|
||||
"token_type": "Bearer",
|
||||
"expires_in": 86400 * 365,
|
||||
}
|
||||
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
w.Header().Set("Access-Control-Allow-Origin", "*")
|
||||
_ = json.NewEncoder(w).Encode(resp)
|
||||
}
|
||||
Reference in New Issue
Block a user