@@ -16,11 +16,25 @@ import (
1616
1717type GitHub struct {
1818 c * resty.Client
19+ repo string
20+ repoId int
1921 authenticityToken string
20- repositoryId string
2122}
2223
23- func New (userSession string ) * GitHub {
24+ type Option func (* GitHub )
25+
26+ func WithRepo (repo string ) Option {
27+ return func (g * GitHub ) {
28+ g .repo = repo
29+ }
30+ }
31+
32+ func New (userSession string , opts ... Option ) * GitHub {
33+ g := & GitHub {}
34+ for _ , opt := range opts {
35+ opt (g )
36+ }
37+
2438 c := resty .New ()
2539 u , _ := url .Parse ("https://github.com" )
2640 // Set cookies to jar avoid leaking to other sites
@@ -42,18 +56,15 @@ func New(userSession string) *GitHub {
4256 c .SetRedirectPolicy (resty .NoRedirectPolicy ())
4357 c .SetContentLength (true )
4458 c .SetHeader ("User-Agent" , "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36" )
45- c .SetHeader ("Referer" , "https://github.com/cli/cli/issues/7797" )
46- return & GitHub {
47- c : c ,
48- // repositoryId doesn't matter, use cli/cli as default
49- repositoryId : "212613049" ,
50- }
59+ g .c = c
60+
61+ return g
5162}
5263
5364var tokenPattern = regexp .MustCompile (`<file-attachment class="js-upload-markdown-image.*?<input type="hidden" value="([^{"]+?)" data-csrf="true"` )
5465
5566func (g * GitHub ) fetchAuthenticityToken () (string , error ) {
56- resp , err := g .c .R ().Get ("https://github.com/cli/cli/ issues/new?assignees=&labels=bug&projects=&template=bug_report.md" )
67+ resp , err := g .c .R ().Get (fmt . Sprintf ( "https://github.com/%s/ issues/new" , g . repo ) )
5768 if err != nil {
5869 return "" , err
5970 }
@@ -68,6 +79,20 @@ func (g *GitHub) fetchAuthenticityToken() (string, error) {
6879 return matches [1 ], nil
6980}
7081
82+ func (g * GitHub ) getRepoId () (int , error ) {
83+ var result struct {
84+ ID int `json:"id"`
85+ }
86+ resp , err := g .c .R ().SetResult (& result ).Get ("https://api.github.com/repos/" + g .repo )
87+ if err != nil {
88+ return 0 , err
89+ }
90+ if ! resp .IsSuccess () {
91+ return 0 , fmt .Errorf ("failed to get repo id: %s" , resp .Status ())
92+ }
93+ return result .ID , nil
94+ }
95+
7196type preUploadResult struct {
7297 UploadUrl string `json:"upload_url"`
7398 UploadAuthenticityToken string `json:"upload_authenticity_token"`
@@ -94,12 +119,19 @@ func (g *GitHub) preUpload(name string, size int, contentType string) (*preUploa
94119 }
95120 g .authenticityToken = token
96121 }
122+ if g .repoId == 0 {
123+ repoId , err := g .getRepoId ()
124+ if err != nil {
125+ return nil , err
126+ }
127+ g .repoId = repoId
128+ }
97129
98130 var result preUploadResult
99131 resp , err := g .c .R ().
100132 SetMultipartFormData (map [string ]string {
101133 "authenticity_token" : g .authenticityToken ,
102- "repository_id" : g . repositoryId ,
134+ "repository_id" : strconv . Itoa ( g . repoId ) ,
103135 "name" : name ,
104136 "size" : strconv .Itoa (size ),
105137 "content_type" : contentType ,
0 commit comments