Adds push, list, get, delete, and login subcommands backed by an HTTP API client, plus an MCP server for tool-based access to the document queue. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
62 lines
1.3 KiB
Go
62 lines
1.3 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"path/filepath"
|
|
"strings"
|
|
|
|
"github.com/spf13/cobra"
|
|
|
|
"git.wntrmute.dev/mc/mcq/internal/client"
|
|
)
|
|
|
|
var clientFlags struct {
|
|
server string
|
|
token string
|
|
}
|
|
|
|
func addClientFlags(cmd *cobra.Command) {
|
|
cmd.Flags().StringVar(&clientFlags.server, "server", "", "MCQ server URL (env: MCQ_SERVER)")
|
|
cmd.Flags().StringVar(&clientFlags.token, "token", "", "auth token (env: MCQ_TOKEN)")
|
|
}
|
|
|
|
func newClient() (*client.Client, error) {
|
|
server := clientFlags.server
|
|
if server == "" {
|
|
server = os.Getenv("MCQ_SERVER")
|
|
}
|
|
if server == "" {
|
|
return nil, fmt.Errorf("server URL required: use --server or MCQ_SERVER")
|
|
}
|
|
|
|
token := clientFlags.token
|
|
if token == "" {
|
|
token = os.Getenv("MCQ_TOKEN")
|
|
}
|
|
if token == "" {
|
|
token = readCachedToken()
|
|
}
|
|
if token == "" {
|
|
return nil, fmt.Errorf("auth token required: use --token, MCQ_TOKEN, or run 'mcq login'")
|
|
}
|
|
|
|
return client.New(server, token), nil
|
|
}
|
|
|
|
func tokenPath() string {
|
|
if dir, err := os.UserConfigDir(); err == nil {
|
|
return filepath.Join(dir, "mcq", "token")
|
|
}
|
|
home, _ := os.UserHomeDir()
|
|
return filepath.Join(home, ".config", "mcq", "token")
|
|
}
|
|
|
|
func readCachedToken() string {
|
|
data, err := os.ReadFile(tokenPath())
|
|
if err != nil {
|
|
return ""
|
|
}
|
|
return strings.TrimSpace(string(data))
|
|
}
|