Skip to content

Commit 1e8502f

Browse files
modules/lfstransfer: call private LFS API
1 parent 165bf9a commit 1e8502f

File tree

4 files changed

+30
-11
lines changed

4 files changed

+30
-11
lines changed

modules/lfstransfer/backend/backend.go

+12-6
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77
"bytes"
88
"context"
99
"encoding/base64"
10+
"fmt"
1011
"io"
1112
"net/http"
1213
"net/url"
@@ -36,6 +37,7 @@ type GiteaBackend struct {
3637
server *url.URL
3738
op string
3839
token string
40+
itoken string
3941
logger transfer.Logger
4042
}
4143

@@ -45,8 +47,8 @@ func New(ctx context.Context, repo, op, token string, logger transfer.Logger) (t
4547
if err != nil {
4648
return nil, err
4749
}
48-
server = server.JoinPath(repo, "info/lfs")
49-
return &GiteaBackend{ctx: ctx, server: server, op: op, token: token, logger: logger}, nil
50+
server = server.JoinPath("api/internal/repo", repo, "info/lfs")
51+
return &GiteaBackend{ctx: ctx, server: server, op: op, token: token, itoken: fmt.Sprintf("Bearer %s", setting.InternalToken), logger: logger}, nil
5052
}
5153

5254
// Batch implements transfer.Backend
@@ -71,7 +73,8 @@ func (g *GiteaBackend) Batch(_ string, pointers []transfer.BatchItem, args trans
7173
}
7274
url := g.server.JoinPath("objects/batch").String()
7375
headers := map[string]string{
74-
headerAuthorisation: g.token,
76+
headerAuthorisation: g.itoken,
77+
headerAuthX: g.token,
7578
headerAccept: mimeGitLFS,
7679
headerContentType: mimeGitLFS,
7780
}
@@ -180,7 +183,8 @@ func (g *GiteaBackend) Download(oid string, args transfer.Args) (io.ReadCloser,
180183
}
181184
url := action.Href
182185
headers := map[string]string{
183-
headerAuthorisation: g.token,
186+
headerAuthorisation: g.itoken,
187+
headerAuthX: g.token,
184188
headerAccept: mimeOctetStream,
185189
}
186190
req := newInternalRequest(g.ctx, url, http.MethodGet, headers, nil)
@@ -225,7 +229,8 @@ func (g *GiteaBackend) Upload(oid string, size int64, r io.Reader, args transfer
225229
}
226230
url := action.Href
227231
headers := map[string]string{
228-
headerAuthorisation: g.token,
232+
headerAuthorisation: g.itoken,
233+
headerAuthX: g.token,
229234
headerContentType: mimeOctetStream,
230235
headerContentLength: strconv.FormatInt(size, 10),
231236
}
@@ -274,7 +279,8 @@ func (g *GiteaBackend) Verify(oid string, size int64, args transfer.Args) (trans
274279
}
275280
url := action.Href
276281
headers := map[string]string{
277-
headerAuthorisation: g.token,
282+
headerAuthorisation: g.itoken,
283+
headerAuthX: g.token,
278284
headerAccept: mimeGitLFS,
279285
headerContentType: mimeGitLFS,
280286
}

modules/lfstransfer/backend/lock.go

+8-4
Original file line numberDiff line numberDiff line change
@@ -25,12 +25,13 @@ type giteaLockBackend struct {
2525
g *GiteaBackend
2626
server *url.URL
2727
token string
28+
itoken string
2829
logger transfer.Logger
2930
}
3031

3132
func newGiteaLockBackend(g *GiteaBackend) transfer.LockBackend {
3233
server := g.server.JoinPath("locks")
33-
return &giteaLockBackend{ctx: g.ctx, g: g, server: server, token: g.token, logger: g.logger}
34+
return &giteaLockBackend{ctx: g.ctx, g: g, server: server, token: g.token, itoken: g.itoken, logger: g.logger}
3435
}
3536

3637
// Create implements transfer.LockBackend
@@ -44,7 +45,8 @@ func (g *giteaLockBackend) Create(path, refname string) (transfer.Lock, error) {
4445
}
4546
url := g.server.String()
4647
headers := map[string]string{
47-
headerAuthorisation: g.token,
48+
headerAuthorisation: g.itoken,
49+
headerAuthX: g.token,
4850
headerAccept: mimeGitLFS,
4951
headerContentType: mimeGitLFS,
5052
}
@@ -95,7 +97,8 @@ func (g *giteaLockBackend) Unlock(lock transfer.Lock) error {
9597
}
9698
url := g.server.JoinPath(lock.ID(), "unlock").String()
9799
headers := map[string]string{
98-
headerAuthorisation: g.token,
100+
headerAuthorisation: g.itoken,
101+
headerAuthX: g.token,
99102
headerAccept: mimeGitLFS,
100103
headerContentType: mimeGitLFS,
101104
}
@@ -177,7 +180,8 @@ func (g *giteaLockBackend) queryLocks(v url.Values) ([]transfer.Lock, string, er
177180
urlq.RawQuery = v.Encode()
178181
url := urlq.String()
179182
headers := map[string]string{
180-
headerAuthorisation: g.token,
183+
headerAuthorisation: g.itoken,
184+
headerAuthX: g.token,
181185
headerAccept: mimeGitLFS,
182186
headerContentType: mimeGitLFS,
183187
}

modules/lfstransfer/backend/util.go

+1
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import (
2222
const (
2323
headerAccept = "Accept"
2424
headerAuthorisation = "Authorization"
25+
headerAuthX = "X-Auth"
2526
headerContentType = "Content-Type"
2627
headerContentLength = "Content-Length"
2728
)

routers/private/internal.go

+9-1
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,14 @@ func bind[T any](_ T) any {
4848
}
4949
}
5050

51+
// SwapAuthToken swaps Authorization header with X-Auth header
52+
func swapAuthToken(next http.Handler) http.Handler {
53+
return http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
54+
req.Header.Set("Authorization", req.Header.Get("X-Auth"))
55+
next.ServeHTTP(w, req)
56+
})
57+
}
58+
5159
// Routes registers all internal APIs routes to web application.
5260
// These APIs will be invoked by internal commands for example `gitea serv` and etc.
5361
func Routes() *web.Router {
@@ -98,7 +106,7 @@ func Routes() *web.Router {
98106
r.Any("/*", func(ctx *context.Context) {
99107
ctx.NotFound("", nil)
100108
})
101-
})
109+
}, swapAuthToken)
102110
}, common.Sessioner(), context.Contexter())
103111
// end "/repo/{username}/{reponame}": git (LFS) API mirror
104112

0 commit comments

Comments
 (0)