MCPcopy Create free account
hub / github.com/diillson/chatcli / LoginGitHubModelsPAT

Function LoginGitHubModelsPAT

auth/github_models.go:20–82  ·  view source on GitHub ↗

LoginGitHubModelsPAT authenticates with GitHub Models marketplace using a GitHub Personal Access Token (PAT). The user can create a token at https://github.com/settings/tokens with no special scopes required for public model inference.

(_ context.Context, logger *zap.Logger)

Source from the content-addressed store, hash-verified

18// https://github.com/settings/tokens with no special scopes required for
19// public model inference.
20func LoginGitHubModelsPAT(_ context.Context, logger *zap.Logger) (string, error) {
21 fmt.Println()
22 fmt.Println(i18n.T("auth.github_models.header"))
23 fmt.Println(i18n.T("auth.github_models.separator"))
24 fmt.Println()
25 fmt.Println(i18n.T("auth.github_models.description"))
26 fmt.Println(i18n.T("auth.github_models.create_url"))
27 fmt.Println(i18n.T("auth.github_models.scopes_hint"))
28 fmt.Println()
29
30 // Check if already available via env
31 for _, envKey := range []string{"GITHUB_TOKEN", "GH_TOKEN", "GITHUB_MODELS_TOKEN"} {
32 if v := strings.TrimSpace(os.Getenv(envKey)); v != "" {
33 fmt.Print(i18n.T("auth.github_models.found_env", envKey))
34 profileID := "github-models:default"
35 cred := &AuthProfileCredential{
36 CredType: CredentialToken,
37 Provider: ProviderGitHubModels,
38 Token: v,
39 Expires: 0, // PAT tokens don't expire
40 }
41 if err := UpsertProfile(profileID, cred, logger); err != nil {
42 return "", fmt.Errorf("%s: %w", i18n.T("auth.github_models.save_failed"), err)
43 }
44 logger.Info(i18n.T("auth.github_models.saved_from_env"), zap.String("env", envKey))
45 return profileID, nil
46 }
47 }
48
49 // Reset terminal from raw mode (go-prompt/bubbletea) so stdin reads work
50 if runtime.GOOS != "windows" {
51 cmd := exec.Command("stty", "sane")
52 cmd.Stdin = os.Stdin
53 _ = cmd.Run()
54 }
55
56 // Prompt user for token
57 fmt.Print(i18n.T("auth.github_models.prompt"))
58 reader := bufio.NewReader(os.Stdin)
59 rawToken, err := reader.ReadString('\n')
60 if err != nil && rawToken == "" {
61 return "", fmt.Errorf("%s: %w", i18n.T("auth.github_models.read_failed"), err)
62 }
63 token := strings.TrimSpace(rawToken)
64 if token == "" {
65 return "", fmt.Errorf("%s", i18n.T("auth.github_models.empty_token"))
66 }
67
68 profileID := "github-models:default"
69 cred := &AuthProfileCredential{
70 CredType: CredentialToken,
71 Provider: ProviderGitHubModels,
72 Token: token,
73 Expires: 0, // PAT tokens don't expire
74 }
75 if err := UpsertProfile(profileID, cred, logger); err != nil {
76 return "", fmt.Errorf("%s: %w", i18n.T("auth.github_models.save_failed"), err)
77 }

Callers 1

handleAuthCommandMethod · 0.92

Calls 6

TFunction · 0.92
UpsertProfileFunction · 0.85
ErrorfMethod · 0.80
InfoMethod · 0.65
RunMethod · 0.65
StringMethod · 0.45

Tested by

no test coverage detected