Skip to content

Commit d7cb503

Browse files
authored
Merge branch 'main' into lunny/fix_gitnote
2 parents 28ace91 + d9b50e4 commit d7cb503

File tree

20 files changed

+385
-20
lines changed

20 files changed

+385
-20
lines changed

.drone.yml

+3-3
Original file line numberDiff line numberDiff line change
@@ -331,7 +331,7 @@ steps:
331331
image: gitea/test_env:linux-amd64 # https://gitea.com/gitea/test-env
332332
user: gitea
333333
commands:
334-
- timeout -s ABRT 40m make test-mysql8-migration test-mysql8
334+
- timeout -s ABRT 50m make test-mysql8-migration test-mysql8
335335
environment:
336336
GOPROXY: https://goproxy.io
337337
TAGS: bindata
@@ -469,7 +469,7 @@ steps:
469469
image: gitea/test_env:linux-arm64 # https://gitea.com/gitea/test-env
470470
user: gitea
471471
commands:
472-
- timeout -s ABRT 40m make test-sqlite-migration test-sqlite
472+
- timeout -s ABRT 50m make test-sqlite-migration test-sqlite
473473
environment:
474474
GOPROXY: https://goproxy.io
475475
TAGS: bindata gogit sqlite sqlite_unlock_notify
@@ -485,7 +485,7 @@ steps:
485485
image: gitea/test_env:linux-arm64 # https://gitea.com/gitea/test-env
486486
user: gitea
487487
commands:
488-
- timeout -s ABRT 40m make test-pgsql-migration test-pgsql
488+
- timeout -s ABRT 50m make test-pgsql-migration test-pgsql
489489
environment:
490490
GOPROXY: https://goproxy.io
491491
TAGS: bindata gogit

MAINTAINERS

+1
Original file line numberDiff line numberDiff line change
@@ -47,3 +47,4 @@ Leon Hofmeister <dev.lh@web.de> (@delvh)
4747
Gusted <williamzijl7@hotmail.com) (@Gusted)
4848
singuliere <singuliere@autistici.org> (@singuliere)
4949
silentcode <silentcode@senga.org> (@silentcodeg)
50+
Wim <wim@42.be> (@42wim)

Makefile

+4-4
Original file line numberDiff line numberDiff line change
@@ -616,27 +616,27 @@ release-windows: | $(DIST_DIRS)
616616
ifeq (,$(findstring gogit,$(TAGS)))
617617
CGO_CFLAGS="$(CGO_CFLAGS)" $(GO) run $(XGO_PACKAGE) -go $(XGO_VERSION) -buildmode exe -dest $(DIST)/binaries -tags 'netgo osusergo gogit $(TAGS)' -ldflags '-linkmode external -extldflags "-static" $(LDFLAGS)' -targets 'windows/*' -out gitea-$(VERSION)-gogit .
618618
endif
619-
ifeq ($(CI),drone)
619+
ifeq ($(CI),true)
620620
cp /build/* $(DIST)/binaries
621621
endif
622622

623623
.PHONY: release-linux
624624
release-linux: | $(DIST_DIRS)
625625
CGO_CFLAGS="$(CGO_CFLAGS)" $(GO) run $(XGO_PACKAGE) -go $(XGO_VERSION) -dest $(DIST)/binaries -tags 'netgo osusergo $(TAGS)' -ldflags '-linkmode external -extldflags "-static" $(LDFLAGS)' -targets '$(LINUX_ARCHS)' -out gitea-$(VERSION) .
626-
ifeq ($(CI),drone)
626+
ifeq ($(CI),true)
627627
cp /build/* $(DIST)/binaries
628628
endif
629629

630630
.PHONY: release-darwin
631631
release-darwin: | $(DIST_DIRS)
632632
CGO_CFLAGS="$(CGO_CFLAGS)" $(GO) run $(XGO_PACKAGE) -go $(XGO_VERSION) -dest $(DIST)/binaries -tags 'netgo osusergo $(TAGS)' -ldflags '$(LDFLAGS)' -targets 'darwin-10.12/amd64,darwin-10.12/arm64' -out gitea-$(VERSION) .
633-
ifeq ($(CI),drone)
633+
ifeq ($(CI),true)
634634
cp /build/* $(DIST)/binaries
635635
endif
636636

637637
.PHONY: release-copy
638638
release-copy: | $(DIST_DIRS)
639-
cd $(DIST); for file in `find /build -type f -name "*"`; do cp $${file} ./release/; done;
639+
cd $(DIST); for file in `find . -type f -name "*"`; do cp $${file} ./release/; done;
640640

641641
.PHONY: release-check
642642
release-check: | $(DIST_DIRS)

go.mod

+1
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ require (
2929
github.com/go-chi/chi/v5 v5.0.7
3030
github.com/go-chi/cors v1.2.1
3131
github.com/go-enry/go-enry/v2 v2.8.2
32+
github.com/go-fed/httpsig v1.1.0
3233
github.com/go-git/go-billy/v5 v5.3.1
3334
github.com/go-git/go-git/v5 v5.4.3-0.20210630082519-b4368b2a2ca4
3435
github.com/go-ldap/ldap/v3 v3.4.3

go.sum

+2
Original file line numberDiff line numberDiff line change
@@ -468,6 +468,8 @@ github.com/go-enry/go-enry/v2 v2.8.2 h1:uiGmC+3K8sVd/6DOe2AOJEOihJdqda83nPyJNtMR
468468
github.com/go-enry/go-enry/v2 v2.8.2/go.mod h1:GVzIiAytiS5uT/QiuakK7TF1u4xDab87Y8V5EJRpsIQ=
469469
github.com/go-enry/go-oniguruma v1.2.1 h1:k8aAMuJfMrqm/56SG2lV9Cfti6tC4x8673aHCcBk+eo=
470470
github.com/go-enry/go-oniguruma v1.2.1/go.mod h1:bWDhYP+S6xZQgiRL7wlTScFYBe023B6ilRZbCAD5Hf4=
471+
github.com/go-fed/httpsig v1.1.0 h1:9M+hb0jkEICD8/cAiNqEB66R87tTINszBRTjwjQzWcI=
472+
github.com/go-fed/httpsig v1.1.0/go.mod h1:RCMrTZvN1bJYtofsG4rd5NaO5obxQ5xBkdiS7xsT7bM=
471473
github.com/go-git/gcfg v1.5.0 h1:Q5ViNfGF8zFgyJWPqYwA7qGFoMTEiBmdlkcfRmpIMa4=
472474
github.com/go-git/gcfg v1.5.0/go.mod h1:5m20vg6GwYabIxaOonVkTdrILxQMpEShl1xiMF4ua+E=
473475
github.com/go-git/go-billy/v5 v5.2.0/go.mod h1:pmpqyWchKfYfrkb/UVH4otLvyi/5gJlGI4Hb3ZqZ3W0=

integrations/api_httpsig_test.go

+137
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,137 @@
1+
// Copyright 2022 The Gitea Authors. All rights reserved.
2+
// Use of this source code is governed by a MIT-style
3+
// license that can be found in the LICENSE file.
4+
5+
package integrations
6+
7+
import (
8+
"encoding/base64"
9+
"fmt"
10+
"net/http"
11+
"net/url"
12+
"testing"
13+
14+
api "code.gitea.io/gitea/modules/structs"
15+
16+
"github.com/go-fed/httpsig"
17+
"golang.org/x/crypto/ssh"
18+
)
19+
20+
const (
21+
httpsigPrivateKey = `-----BEGIN OPENSSH PRIVATE KEY-----
22+
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABFwAAAAdzc2gtcn
23+
NhAAAAAwEAAQAAAQEAqjmQeb5Eb1xV7qbNf9ErQ0XRvKZWzUsLFhJzZz+Ab7q8WtPs91vQ
24+
fBiypw4i8OTG6WzDcgZaV8Ndxn7iHnIstdA1k89MVG4stydymmwmk9+mrCMNsu5OmdIy9F
25+
AZ61RDcKuf5VG2WKkmeK0VO+OMJIYfE1C6czNeJ6UAmcIOmhGxvjMI83XUO9n0ftwTwayp
26+
+XU5prvKx/fTvlPjbraPNU4OzwPjVLqXBzpoXYhBquPaZYFRVyvfFZLObYsmy+BrsxcloM
27+
l+9w4P0ATJ9njB7dRDL+RrN4uhhYSihqOK4w4vaiOj1+aA0eC0zXunEfLXfGIVQ/FhWcCy
28+
5f72mMiKnQAAA9AxSmzFMUpsxQAAAAdzc2gtcnNhAAABAQCqOZB5vkRvXFXups1/0StDRd
29+
G8plbNSwsWEnNnP4Bvurxa0+z3W9B8GLKnDiLw5MbpbMNyBlpXw13GfuIeciy10DWTz0xU
30+
biy3J3KabCaT36asIw2y7k6Z0jL0UBnrVENwq5/lUbZYqSZ4rRU744wkhh8TULpzM14npQ
31+
CZwg6aEbG+MwjzddQ72fR+3BPBrKn5dTmmu8rH99O+U+Nuto81Tg7PA+NUupcHOmhdiEGq
32+
49plgVFXK98Vks5tiybL4GuzFyWgyX73Dg/QBMn2eMHt1EMv5Gs3i6GFhKKGo4rjDi9qI6
33+
PX5oDR4LTNe6cR8td8YhVD8WFZwLLl/vaYyIqdAAAAAwEAAQAAAQBz+nyBNi2SYir6SxPA
34+
flcnoq5gBkUl4ndPNosCUbXEakpi5/mQHzJRGtK+F1efIYCVEdGoIsPy/90onNKbQ9dKmO
35+
2oI5kx/U7iCzJ+HCm8nqkEp21x+AP9scWdx+Wg/OxmG8j5iU7f4X+gwOyyvTqCuA78Lgia
36+
7Oi9wiJCoIEqXr6dRYGJzfASwKA2dj995HzATexleLSD5fQCmZTF+Vh5OQ5WmE+c53JdZS
37+
T3Plie/P/smgSWBtf1fWr6JL2+EBsqQsIK1Jo7r/7rxsz+ILoVfnneNQY4QSa9W+t6ZAI+
38+
caSA0Guv7vC92ewjlMVlwKa3XaEjMJb5sFlg1r6TYMwBAAAAgQDQwXvgSXNaSHIeH53/Ab
39+
t4BlNibtxK8vY8CZFloAKXkjrivKSlDAmQCM0twXOweX2ScPjE+XlSMV4AUsv/J6XHGHci
40+
W3+PGIBfc/fQRBpiyhzkoXYDVrlkSKHffCnAqTUQlYkhr0s7NkZpEeqPE0doAUs4dK3Iqb
41+
zdtz8e5BPXZwAAAIEA4U/JskIu5Oge8Is2OLOhlol0EJGw5JGodpFyhbMC+QYK9nYqy7wI
42+
a6mZ2EfOjjwIZD/+wYyulw6cRve4zXwgzUEXLIKp8/H3sYvJK2UMeP7y68sQFqGxbm6Rnh
43+
tyBBSaJQnOXVOFf9gqZGCyO/J0Illg3AXTuC8KS/cxwasC38EAAACBAMFo/6XQoR6E3ynj
44+
VBaz2SilWqQBixUyvcNz8LY73IIDCecoccRMFSEKhWtvlJijxvFbF9M8g9oKAVPuub4V5r
45+
CGmwVPEd5yt4C2iyV0PhLp1PA2/i42FpCSnHaz/EXSz6ncTZcOMMuDqUbgUUpQg4VSUDl9
46+
fhTNAzWwZoQ91aHdAAAAFHUwMDIyMTQ2QGljdHMtcC1ueC03AQIDBAUG
47+
-----END OPENSSH PRIVATE KEY-----`
48+
httpsigCertificate = `ssh-rsa-cert-v01@openssh.com AAAAHHNzaC1yc2EtY2VydC12MDFAb3BlbnNzaC5jb20AAAAgiR7SU8gmZLhopx4Y03nOXVuAb+4fyMcJYjMGcE1Z2oEAAAADAQABAAABAQCqOZB5vkRvXFXups1/0StDRdG8plbNSwsWEnNnP4Bvurxa0+z3W9B8GLKnDiLw5MbpbMNyBlpXw13GfuIeciy10DWTz0xUbiy3J3KabCaT36asIw2y7k6Z0jL0UBnrVENwq5/lUbZYqSZ4rRU744wkhh8TULpzM14npQCZwg6aEbG+MwjzddQ72fR+3BPBrKn5dTmmu8rH99O+U+Nuto81Tg7PA+NUupcHOmhdiEGq49plgVFXK98Vks5tiybL4GuzFyWgyX73Dg/QBMn2eMHt1EMv5Gs3i6GFhKKGo4rjDi9qI6PX5oDR4LTNe6cR8td8YhVD8WFZwLLl/vaYyIqdAAAAAAAAAAEAAAABAAAABXVzZXIxAAAACQAAAAV1c2VyMQAAAABimoIOAAAAAMCWkRMAAAAAAAAAggAAABVwZXJtaXQtWDExLWZvcndhcmRpbmcAAAAAAAAAF3Blcm1pdC1hZ2VudC1mb3J3YXJkaW5nAAAAAAAAABZwZXJtaXQtcG9ydC1mb3J3YXJkaW5nAAAAAAAAAApwZXJtaXQtcHR5AAAAAAAAAA5wZXJtaXQtdXNlci1yYwAAAAAAAAAAAAABlwAAAAdzc2gtcnNhAAAAAwEAAQAAAYEAm+AwtXTBZyeqV1qOxjMU3Ibc5iR2M3zerGfRQDxUeIozC3xpIvqJbzjDuRapdf8hpxn2xC0GtUusuLIUr4/+Svs1BUnJhF2H9xnK/O0aopS5MpNekUvnBzQdbvO8Ux2xE2mt58giXhkEaXeCEODSqG++OZsA2e40AR/AGRJ4OdDofMvH4vLJAQQc2mKdYpYL8xu+NC+7nsenx1etpsqtEl3gmvqCVI6t9uhVPMvlbGt9h/AN3u7ToF2T3bdk1TZbcdkvR9ljvETIuy32ksAETX8tc7vm30edK+nn/GMeWCgjM+MFm9Uh1NRkvNNJozo5SJy0DkWETTJUsEdfry5VQ3IjqhWqQ0m4/mDlTmsEdEdWqpUiqWZLd9w7jgT8fanuglZyIu2fj8fyqjPjiws5S2P0Uvi28UKQ1nH01UYj/kuakU3BNzN1IqDf3tARP9fjKV/dCBqb1ZAOtyC2GyhGuGzNwEi+woUwq+sTeV0/hqVSb3hSitXHzcfRMRyOK82BAAABlAAAAAxyc2Etc2hhMi01MTIAAAGAMBfgZFvz4BdxriGKYd6eRhMo6hf+I8S9uzNRsflJXHuA+HR9ExIm/Q9JjKmfThQzNyGGBOBILaDU205SAJuG+kk3SieSQDd75ZQd8YmNlCc+516AriOsTiyVCupnf3I2euTjMZqEZbJcBbkBljppTOWQVN7xxE8QakDfGhg0+RjJE9wYOTmkKpDBfII5Nw8V5DoOD7kNEpXYqHdy/8lVxpqUYNIP1J0dNP4f6qBcZcM1PDA12q8zwIGqSNNjf2UXY/Nr8nv9CnK4fB8NDOPKTBa4cm48BGbvM/X0l6dYKswuZ9Np8lw+y6+GxTgznGCrkzMmuEV4FzSq4xHp41H2L2MTwUkwYaeyG1VP6aWkvn6zPkSxaaJDfQX7CAFe17IhIGXR0UPLjKjh35nDLzMWb/W6/W1lK9YkZNHXSf7Z9m9MUAZN7yQgOggGsuYEW4imZxvZizMd+fdDu9mbhr0FDis89I7MSJDnyYRE9FXS7p3QpppBwGcss/9yV3JV3Bjc`
49+
)
50+
51+
func TestHTTPSigPubKey(t *testing.T) {
52+
// Add our public key to user1
53+
defer prepareTestEnv(t)()
54+
session := loginUser(t, "user1")
55+
token := url.QueryEscape(getTokenForLoggedInUser(t, session))
56+
keysURL := fmt.Sprintf("/api/v1/user/keys?token=%s", token)
57+
keyType := "ssh-rsa"
58+
keyContent := "AAAAB3NzaC1yc2EAAAADAQABAAABAQCqOZB5vkRvXFXups1/0StDRdG8plbNSwsWEnNnP4Bvurxa0+z3W9B8GLKnDiLw5MbpbMNyBlpXw13GfuIeciy10DWTz0xUbiy3J3KabCaT36asIw2y7k6Z0jL0UBnrVENwq5/lUbZYqSZ4rRU744wkhh8TULpzM14npQCZwg6aEbG+MwjzddQ72fR+3BPBrKn5dTmmu8rH99O+U+Nuto81Tg7PA+NUupcHOmhdiEGq49plgVFXK98Vks5tiybL4GuzFyWgyX73Dg/QBMn2eMHt1EMv5Gs3i6GFhKKGo4rjDi9qI6PX5oDR4LTNe6cR8td8YhVD8WFZwLLl/vaYyIqd"
59+
rawKeyBody := api.CreateKeyOption{
60+
Title: "test-key",
61+
Key: keyType + " " + keyContent,
62+
}
63+
req := NewRequestWithJSON(t, "POST", keysURL, rawKeyBody)
64+
session.MakeRequest(t, req, http.StatusCreated)
65+
66+
// parse our private key and create the httpsig request
67+
sshSigner, _ := ssh.ParsePrivateKey([]byte(httpsigPrivateKey))
68+
keyID := ssh.FingerprintSHA256(sshSigner.PublicKey())
69+
70+
// create the request
71+
req = NewRequest(t, "GET", "/api/v1/admin/users")
72+
73+
signer, _, err := httpsig.NewSSHSigner(sshSigner, httpsig.DigestSha512, []string{httpsig.RequestTarget, "(created)", "(expires)"}, httpsig.Signature, 10)
74+
if err != nil {
75+
t.Fatal(err)
76+
}
77+
78+
// sign the request
79+
err = signer.SignRequest(keyID, req, nil)
80+
if err != nil {
81+
t.Fatal(err)
82+
}
83+
84+
// make the request
85+
MakeRequest(t, req, http.StatusOK)
86+
}
87+
88+
func TestHTTPSigCert(t *testing.T) {
89+
// Add our public key to user1
90+
defer prepareTestEnv(t)()
91+
session := loginUser(t, "user1")
92+
93+
csrf := GetCSRF(t, session, "/user/settings/keys")
94+
req := NewRequestWithValues(t, "POST", "/user/settings/keys", map[string]string{
95+
"_csrf": csrf,
96+
"content": "user1",
97+
"title": "principal",
98+
"type": "principal",
99+
})
100+
101+
session.MakeRequest(t, req, http.StatusSeeOther)
102+
pkcert, _, _, _, err := ssh.ParseAuthorizedKey([]byte(httpsigCertificate))
103+
if err != nil {
104+
t.Fatal(err)
105+
}
106+
107+
// parse our private key and create the httpsig request
108+
sshSigner, _ := ssh.ParsePrivateKey([]byte(httpsigPrivateKey))
109+
keyID := "gitea"
110+
111+
// create our certificate signer using the ssh signer and our certificate
112+
certSigner, err := ssh.NewCertSigner(pkcert.(*ssh.Certificate), sshSigner)
113+
if err != nil {
114+
t.Fatal(err)
115+
}
116+
117+
// create the request
118+
req = NewRequest(t, "GET", "/api/v1/admin/users")
119+
120+
// add our cert to the request
121+
certString := base64.RawStdEncoding.EncodeToString(pkcert.(*ssh.Certificate).Marshal())
122+
req.Header.Add("x-ssh-certificate", certString)
123+
124+
signer, _, err := httpsig.NewSSHSigner(certSigner, httpsig.DigestSha512, []string{httpsig.RequestTarget, "(created)", "(expires)", "x-ssh-certificate"}, httpsig.Signature, 10)
125+
if err != nil {
126+
t.Fatal(err)
127+
}
128+
129+
// sign the request
130+
err = signer.SignRequest(keyID, req, nil)
131+
if err != nil {
132+
t.Fatal(err)
133+
}
134+
135+
// make the request
136+
MakeRequest(t, req, http.StatusOK)
137+
}

integrations/mssql.ini.tmpl

+1
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ OFFLINE_MODE = false
4949
LFS_JWT_SECRET = Tv_MjmZuHqpIY6GFl12ebgkRAMt4RlWt0v4EHKSXO0w
5050
APP_DATA_PATH = integrations/gitea-integration-mssql/data
5151
BUILTIN_SSH_SERVER_USER = git
52+
SSH_TRUSTED_USER_CA_KEYS = ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCb4DC1dMFnJ6pXWo7GMxTchtzmJHYzfN6sZ9FAPFR4ijMLfGki+olvOMO5Fql1/yGnGfbELQa1S6y4shSvj/5K+zUFScmEXYf3Gcr87RqilLkyk16RS+cHNB1u87xTHbETaa3nyCJeGQRpd4IQ4NKob745mwDZ7jQBH8AZEng50Oh8y8fi8skBBBzaYp1ilgvzG740L7uex6fHV62myq0SXeCa+oJUjq326FU8y+Vsa32H8A3e7tOgXZPdt2TVNltx2S9H2WO8RMi7LfaSwARNfy1zu+bfR50r6ef8Yx5YKCMz4wWb1SHU1GS800mjOjlInLQORYRNMlSwR1+vLlVDciOqFapDSbj+YOVOawR0R1aqlSKpZkt33DuOBPx9qe6CVnIi7Z+Px/KqM+OLCzlLY/RS+LbxQpDWcfTVRiP+S5qRTcE3M3UioN/e0BE/1+MpX90IGpvVkA63ILYbKEa4bM3ASL7ChTCr6xN5XT+GpVJveFKK1cfNx9ExHI4rzYE=
5253

5354
[attachment]
5455
PATH = integrations/gitea-integration-mssql/data/attachments

integrations/mysql.ini.tmpl

+1
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ OFFLINE_MODE = false
5151

5252
LFS_START_SERVER = true
5353
LFS_JWT_SECRET = Tv_MjmZuHqpIY6GFl12ebgkRAMt4RlWt0v4EHKSXO0w
54+
SSH_TRUSTED_USER_CA_KEYS = ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCb4DC1dMFnJ6pXWo7GMxTchtzmJHYzfN6sZ9FAPFR4ijMLfGki+olvOMO5Fql1/yGnGfbELQa1S6y4shSvj/5K+zUFScmEXYf3Gcr87RqilLkyk16RS+cHNB1u87xTHbETaa3nyCJeGQRpd4IQ4NKob745mwDZ7jQBH8AZEng50Oh8y8fi8skBBBzaYp1ilgvzG740L7uex6fHV62myq0SXeCa+oJUjq326FU8y+Vsa32H8A3e7tOgXZPdt2TVNltx2S9H2WO8RMi7LfaSwARNfy1zu+bfR50r6ef8Yx5YKCMz4wWb1SHU1GS800mjOjlInLQORYRNMlSwR1+vLlVDciOqFapDSbj+YOVOawR0R1aqlSKpZkt33DuOBPx9qe6CVnIi7Z+Px/KqM+OLCzlLY/RS+LbxQpDWcfTVRiP+S5qRTcE3M3UioN/e0BE/1+MpX90IGpvVkA63ILYbKEa4bM3ASL7ChTCr6xN5XT+GpVJveFKK1cfNx9ExHI4rzYE=
5455

5556
[lfs]
5657
MINIO_BASE_PATH = lfs/

integrations/mysql8.ini.tmpl

+1
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ OFFLINE_MODE = false
4949
LFS_JWT_SECRET = Tv_MjmZuHqpIY6GFl12ebgkRAMt4RlWt0v4EHKSXO0w
5050
APP_DATA_PATH = integrations/gitea-integration-mysql8/data
5151
BUILTIN_SSH_SERVER_USER = git
52+
SSH_TRUSTED_USER_CA_KEYS = ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCb4DC1dMFnJ6pXWo7GMxTchtzmJHYzfN6sZ9FAPFR4ijMLfGki+olvOMO5Fql1/yGnGfbELQa1S6y4shSvj/5K+zUFScmEXYf3Gcr87RqilLkyk16RS+cHNB1u87xTHbETaa3nyCJeGQRpd4IQ4NKob745mwDZ7jQBH8AZEng50Oh8y8fi8skBBBzaYp1ilgvzG740L7uex6fHV62myq0SXeCa+oJUjq326FU8y+Vsa32H8A3e7tOgXZPdt2TVNltx2S9H2WO8RMi7LfaSwARNfy1zu+bfR50r6ef8Yx5YKCMz4wWb1SHU1GS800mjOjlInLQORYRNMlSwR1+vLlVDciOqFapDSbj+YOVOawR0R1aqlSKpZkt33DuOBPx9qe6CVnIi7Z+Px/KqM+OLCzlLY/RS+LbxQpDWcfTVRiP+S5qRTcE3M3UioN/e0BE/1+MpX90IGpvVkA63ILYbKEa4bM3ASL7ChTCr6xN5XT+GpVJveFKK1cfNx9ExHI4rzYE=
5253

5354
[attachment]
5455
PATH = integrations/gitea-integration-mysql8/data/attachments

integrations/pgsql.ini.tmpl

+1
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ OFFLINE_MODE = false
5050
LFS_JWT_SECRET = Tv_MjmZuHqpIY6GFl12ebgkRAMt4RlWt0v4EHKSXO0w
5151
APP_DATA_PATH = integrations/gitea-integration-pgsql/data
5252
BUILTIN_SSH_SERVER_USER = git
53+
SSH_TRUSTED_USER_CA_KEYS = ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCb4DC1dMFnJ6pXWo7GMxTchtzmJHYzfN6sZ9FAPFR4ijMLfGki+olvOMO5Fql1/yGnGfbELQa1S6y4shSvj/5K+zUFScmEXYf3Gcr87RqilLkyk16RS+cHNB1u87xTHbETaa3nyCJeGQRpd4IQ4NKob745mwDZ7jQBH8AZEng50Oh8y8fi8skBBBzaYp1ilgvzG740L7uex6fHV62myq0SXeCa+oJUjq326FU8y+Vsa32H8A3e7tOgXZPdt2TVNltx2S9H2WO8RMi7LfaSwARNfy1zu+bfR50r6ef8Yx5YKCMz4wWb1SHU1GS800mjOjlInLQORYRNMlSwR1+vLlVDciOqFapDSbj+YOVOawR0R1aqlSKpZkt33DuOBPx9qe6CVnIi7Z+Px/KqM+OLCzlLY/RS+LbxQpDWcfTVRiP+S5qRTcE3M3UioN/e0BE/1+MpX90IGpvVkA63ILYbKEa4bM3ASL7ChTCr6xN5XT+GpVJveFKK1cfNx9ExHI4rzYE=
5354

5455
[attachment]
5556
PATH = integrations/gitea-integration-pgsql/data/attachments

integrations/sqlite.ini.tmpl

+1
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ LFS_JWT_SECRET = Tv_MjmZuHqpIY6GFl12ebgkRAMt4RlWt0v4EHKSXO0w
4646
APP_DATA_PATH = integrations/gitea-integration-sqlite/data
4747
ENABLE_GZIP = true
4848
BUILTIN_SSH_SERVER_USER = git
49+
SSH_TRUSTED_USER_CA_KEYS = ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCb4DC1dMFnJ6pXWo7GMxTchtzmJHYzfN6sZ9FAPFR4ijMLfGki+olvOMO5Fql1/yGnGfbELQa1S6y4shSvj/5K+zUFScmEXYf3Gcr87RqilLkyk16RS+cHNB1u87xTHbETaa3nyCJeGQRpd4IQ4NKob745mwDZ7jQBH8AZEng50Oh8y8fi8skBBBzaYp1ilgvzG740L7uex6fHV62myq0SXeCa+oJUjq326FU8y+Vsa32H8A3e7tOgXZPdt2TVNltx2S9H2WO8RMi7LfaSwARNfy1zu+bfR50r6ef8Yx5YKCMz4wWb1SHU1GS800mjOjlInLQORYRNMlSwR1+vLlVDciOqFapDSbj+YOVOawR0R1aqlSKpZkt33DuOBPx9qe6CVnIi7Z+Px/KqM+OLCzlLY/RS+LbxQpDWcfTVRiP+S5qRTcE3M3UioN/e0BE/1+MpX90IGpvVkA63ILYbKEa4bM3ASL7ChTCr6xN5XT+GpVJveFKK1cfNx9ExHI4rzYE=
4950

5051
[attachment]
5152
PATH = integrations/gitea-integration-sqlite/data/attachments

integrations/testlogger.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ func PrintCurrentTest(t testing.TB, skip ...int) func() {
126126
if log.CanColorStdout {
127127
fmt.Fprintf(os.Stdout, "+++ %s is a slow test (took %v)\n", fmt.Formatter(log.NewColoredValue(t.Name(), log.Bold, log.FgYellow)), fmt.Formatter(log.NewColoredValue(took, log.Bold, log.FgYellow)))
128128
} else {
129-
fmt.Fprintf(os.Stdout, "+++ %s is a slow tets (took %v)\n", t.Name(), took)
129+
fmt.Fprintf(os.Stdout, "+++ %s is a slow test (took %v)\n", t.Name(), took)
130130
}
131131
}
132132
timer := time.AfterFunc(slowFlush, func() {

models/migrations/testlogger_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ func PrintCurrentTest(t testing.TB, skip ...int) func() {
111111
if log.CanColorStdout {
112112
fmt.Fprintf(os.Stdout, "+++ %s is a slow test (took %v)\n", fmt.Formatter(log.NewColoredValue(t.Name(), log.Bold, log.FgYellow)), fmt.Formatter(log.NewColoredValue(took, log.Bold, log.FgYellow)))
113113
} else {
114-
fmt.Fprintf(os.Stdout, "+++ %s is a slow tets (took %v)\n", t.Name(), took)
114+
fmt.Fprintf(os.Stdout, "+++ %s is a slow test (took %v)\n", t.Name(), took)
115115
}
116116
}
117117
timer := time.AfterFunc(slowFlush, func() {

modules/ssh/ssh.go

+2-1
Original file line numberDiff line numberDiff line change
@@ -188,8 +188,9 @@ func publicKeyHandler(ctx ssh.Context, key ssh.PublicKey) bool {
188188

189189
c := &gossh.CertChecker{
190190
IsUserAuthority: func(auth gossh.PublicKey) bool {
191+
marshaled := auth.Marshal()
191192
for _, k := range setting.SSH.TrustedUserCAKeysParsed {
192-
if bytes.Equal(auth.Marshal(), k.Marshal()) {
193+
if bytes.Equal(marshaled, k.Marshal()) {
193194
return true
194195
}
195196
}

options/locale/locale_en-US.ini

+1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ home = Home
22
dashboard = Dashboard
33
explore = Explore
44
help = Help
5+
logo = Logo
56
sign_in = Sign In
67
sign_in_with = Sign In With
78
sign_out = Sign Out

routers/api/v1/api.go

+1
Original file line numberDiff line numberDiff line change
@@ -592,6 +592,7 @@ func bind(obj interface{}) http.HandlerFunc {
592592
func buildAuthGroup() *auth.Group {
593593
group := auth.NewGroup(
594594
&auth.OAuth2{},
595+
&auth.HTTPSign{},
595596
&auth.Basic{}, // FIXME: this should be removed once we don't allow basic auth in API
596597
)
597598
if setting.Service.EnableReverseProxyAuth {

0 commit comments

Comments
 (0)