Skip to content

Commit 650d02a

Browse files
committed
Merge branch 'main' into HEAD
2 parents 74379c7 + cc42c64 commit 650d02a

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

48 files changed

+1537
-129
lines changed

cmd/dump.go

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ import (
2222
"code.gitea.io/gitea/modules/util"
2323

2424
"gitea.com/go-chi/session"
25-
archiver "github.com/mholt/archiver/v3"
25+
"github.com/mholt/archiver/v3"
2626
"github.com/urfave/cli"
2727
)
2828

@@ -439,8 +439,23 @@ func addRecursiveExclude(w archiver.Writer, insidePath, absPath string, excludeA
439439
}
440440
}
441441
} else {
442-
if err = addFile(w, currentInsidePath, currentAbsPath, verbose); err != nil {
443-
return err
442+
// only copy regular files and symlink regular files, skip non-regular files like socket/pipe/...
443+
shouldAdd := file.Mode().IsRegular()
444+
if !shouldAdd && file.Mode()&os.ModeSymlink == os.ModeSymlink {
445+
target, err := filepath.EvalSymlinks(currentAbsPath)
446+
if err != nil {
447+
return err
448+
}
449+
targetStat, err := os.Stat(target)
450+
if err != nil {
451+
return err
452+
}
453+
shouldAdd = targetStat.Mode().IsRegular()
454+
}
455+
if shouldAdd {
456+
if err = addFile(w, currentInsidePath, currentAbsPath, verbose); err != nil {
457+
return err
458+
}
444459
}
445460
}
446461
}

cmd/web.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import (
2121
"code.gitea.io/gitea/routers"
2222
"code.gitea.io/gitea/routers/install"
2323

24+
"github.com/felixge/fgprof"
2425
"github.com/urfave/cli"
2526
ini "gopkg.in/ini.v1"
2627
)
@@ -145,6 +146,7 @@ func runWeb(ctx *cli.Context) error {
145146

146147
if setting.EnablePprof {
147148
go func() {
149+
http.DefaultServeMux.Handle("/debug/fgprof", fgprof.Handler())
148150
_, _, finished := process.GetManager().AddTypedContext(context.Background(), "Web: PProf Server", process.SystemProcessType, true)
149151
log.Info("Starting pprof server on localhost:6060")
150152
log.Info("%v", http.ListenAndServe("localhost:6060", nil))

custom/conf/app.example.ini

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2231,10 +2231,12 @@ PATH =
22312231
;;
22322232
;; Allowed domains for migrating, default is blank. Blank means everything will be allowed.
22332233
;; Multiple domains could be separated by commas.
2234+
;; Wildcard is supported: "github.com, *.github.com"
22342235
;ALLOWED_DOMAINS =
22352236
;;
22362237
;; Blocklist for migrating, default is blank. Multiple domains could be separated by commas.
22372238
;; When ALLOWED_DOMAINS is not blank, this option has a higher priority to deny domains.
2239+
;; Wildcard is supported.
22382240
;BLOCKED_DOMAINS =
22392241
;;
22402242
;; Allow private addresses defined by RFC 1918, RFC 1122, RFC 4632 and RFC 4291 (false by default)
@@ -2251,6 +2253,23 @@ PATH =
22512253
;;
22522254
;; Enable/Disable user statistics for nodeinfo if federation is enabled
22532255
; SHARE_USER_STATISTICS = true
2256+
;;
2257+
;; Maximum federation request and response size (MB)
2258+
; MAX_SIZE = 4
2259+
;;
2260+
;; WARNING: Changing the settings below can break federation.
2261+
;;
2262+
;; HTTP signature algorithms
2263+
; ALGORITHMS = rsa-sha256, rsa-sha512, ed25519
2264+
;;
2265+
;; HTTP signature digest algorithm
2266+
; DIGEST_ALGORITHM = SHA-256
2267+
;;
2268+
;; GET headers for federation requests
2269+
; GET_HEADERS = (request-target), Date
2270+
;;
2271+
;; POST headers for federation requests
2272+
; POST_HEADERS = (request-target), Date, Digest
22542273

22552274
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
22562275
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

docs/content/doc/advanced/config-cheat-sheet.en-us.md

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1081,15 +1081,23 @@ Task queue configuration has been moved to `queue.task`. However, the below conf
10811081

10821082
- `MAX_ATTEMPTS`: **3**: Max attempts per http/https request on migrations.
10831083
- `RETRY_BACKOFF`: **3**: Backoff time per http/https request retry (seconds)
1084-
- `ALLOWED_DOMAINS`: **\<empty\>**: Domains allowlist for migrating repositories, default is blank. It means everything will be allowed. Multiple domains could be separated by commas.
1085-
- `BLOCKED_DOMAINS`: **\<empty\>**: Domains blocklist for migrating repositories, default is blank. Multiple domains could be separated by commas. When `ALLOWED_DOMAINS` is not blank, this option has a higher priority to deny domains.
1084+
- `ALLOWED_DOMAINS`: **\<empty\>**: Domains allowlist for migrating repositories, default is blank. It means everything will be allowed. Multiple domains could be separated by commas. Wildcard is supported: `github.com, *.github.com`.
1085+
- `BLOCKED_DOMAINS`: **\<empty\>**: Domains blocklist for migrating repositories, default is blank. Multiple domains could be separated by commas. When `ALLOWED_DOMAINS` is not blank, this option has a higher priority to deny domains. Wildcard is supported.
10861086
- `ALLOW_LOCALNETWORKS`: **false**: Allow private addresses defined by RFC 1918, RFC 1122, RFC 4632 and RFC 4291
10871087
- `SKIP_TLS_VERIFY`: **false**: Allow skip tls verify
10881088

10891089
## Federation (`federation`)
10901090

10911091
- `ENABLED`: **true**: Enable/Disable federation capabilities
10921092
- `SHARE_USER_STATISTICS`: **true**: Enable/Disable user statistics for nodeinfo if federation is enabled
1093+
- `MAX_SIZE`: **4**: Maximum federation request and response size (MB)
1094+
1095+
WARNING: Changing the settings below can break federation.
1096+
1097+
- `ALGORITHMS`: **rsa-sha256, rsa-sha512, ed25519**: HTTP signature algorithms
1098+
- `DIGEST_ALGORITHM`: **SHA-256**: HTTP signature digest algorithm
1099+
- `GET_HEADERS`: **(request-target), Date**: GET headers for federation requests
1100+
- `POST_HEADERS`: **(request-target), Date, Digest**: POST headers for federation requests
10931101

10941102
## Packages (`packages`)
10951103

go.mod

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,14 @@ require (
2626
github.com/editorconfig/editorconfig-core-go/v2 v2.4.4
2727
github.com/emirpasic/gods v1.18.1
2828
github.com/ethantkoenig/rupture v1.0.1
29+
github.com/felixge/fgprof v0.9.2
2930
github.com/gliderlabs/ssh v0.3.4
31+
github.com/go-ap/activitypub v0.0.0-20220615144428-48208c70483b
32+
github.com/go-ap/jsonld v0.0.0-20220615144122-1d862b15410d
3033
github.com/go-chi/chi/v5 v5.0.7
3134
github.com/go-chi/cors v1.2.1
3235
github.com/go-enry/go-enry/v2 v2.8.2
33-
github.com/go-fed/httpsig v1.1.0
36+
github.com/go-fed/httpsig v1.1.1-0.20201223112313-55836744818e
3437
github.com/go-git/go-billy/v5 v5.3.1
3538
github.com/go-git/go-git/v5 v5.4.3-0.20210630082519-b4368b2a2ca4
3639
github.com/go-ldap/ldap/v3 v3.4.3
@@ -106,6 +109,7 @@ require (
106109

107110
require (
108111
cloud.google.com/go v0.99.0 // indirect
112+
git.sr.ht/~mariusor/go-xsd-duration v0.0.0-20200411073322-f0bcc40f0bf2 // indirect
109113
github.com/Azure/go-ntlmssp v0.0.0-20211209120228-48547f28849e // indirect
110114
github.com/Microsoft/go-winio v0.5.2 // indirect
111115
github.com/ProtonMail/go-crypto v0.0.0-20220407094043-a94812496cf5 // indirect
@@ -159,6 +163,7 @@ require (
159163
github.com/fsnotify/fsnotify v1.5.4 // indirect
160164
github.com/fullstorydev/grpcurl v1.8.1 // indirect
161165
github.com/fxamacker/cbor/v2 v2.4.0 // indirect
166+
github.com/go-ap/errors v0.0.0-20220615144307-e8bc4a40ae9f // indirect
162167
github.com/go-asn1-ber/asn1-ber v1.5.4 // indirect
163168
github.com/go-enry/go-oniguruma v1.2.1 // indirect
164169
github.com/go-git/gcfg v1.5.0 // indirect
@@ -251,6 +256,7 @@ require (
251256
github.com/toqueteos/webbrowser v1.2.0 // indirect
252257
github.com/ulikunitz/xz v0.5.10 // indirect
253258
github.com/unknwon/com v1.0.1 // indirect
259+
github.com/valyala/fastjson v1.6.3 // indirect
254260
github.com/x448/float16 v0.8.4 // indirect
255261
github.com/xanzy/ssh-agent v0.3.1 // indirect
256262
github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8 // indirect

go.sum

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,8 @@ contrib.go.opencensus.io/exporter/stackdriver v0.13.5/go.mod h1:aXENhDJ1Y4lIg4EU
6969
contrib.go.opencensus.io/integrations/ocsql v0.1.4/go.mod h1:8DsSdjz3F+APR+0z0WkU1aRorQCFfRxvqjUUPMbF3fE=
7070
contrib.go.opencensus.io/resource v0.1.1/go.mod h1:F361eGI91LCmW1I/Saf+rX0+OFcigGlFvXwEGEnkRLA=
7171
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
72+
git.sr.ht/~mariusor/go-xsd-duration v0.0.0-20200411073322-f0bcc40f0bf2 h1:2OrsyJYZp7J6nyAsKi2q1SELYRaIc0aQmcQ/EQqPfk8=
73+
git.sr.ht/~mariusor/go-xsd-duration v0.0.0-20200411073322-f0bcc40f0bf2/go.mod h1:g/V2Hjas6Z1UHUp4yIx6bATpNzJ7DYtD0FG3+xARWxs=
7274
gitea.com/go-chi/binding v0.0.0-20220309004920-114340dabecb h1:Yy0Bxzc8R2wxiwXoG/rECGplJUSpXqCsog9PuJFgiHs=
7375
gitea.com/go-chi/binding v0.0.0-20220309004920-114340dabecb/go.mod h1:77TZu701zMXWJFvB8gvTbQ92zQ3DQq/H7l5wAEjQRKc=
7476
gitea.com/go-chi/cache v0.0.0-20210110083709-82c4c9ce2d5e/go.mod h1:k2V/gPDEtXGjjMGuBJiapffAXTv76H4snSmlJRLUhH0=
@@ -426,6 +428,8 @@ github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5Kwzbycv
426428
github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU=
427429
github.com/fatih/color v1.13.0 h1:8LOYc1KYPPmyKMuN8QV2DNRWNbLo6LZ0iLs8+mlH53w=
428430
github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk=
431+
github.com/felixge/fgprof v0.9.2 h1:tAMHtWMyl6E0BimjVbFt7fieU6FpjttsZN7j0wT5blc=
432+
github.com/felixge/fgprof v0.9.2/go.mod h1:+VNi+ZXtHIQ6wIw6bUT8nXQRefQflWECoFyRealT5sg=
429433
github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
430434
github.com/felixge/httpsnoop v1.0.2 h1:+nS9g82KMXccJ/wp0zyRW9ZBHFETmMGtkk+2CTTrW4o=
431435
github.com/felixge/httpsnoop v1.0.2/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
@@ -458,6 +462,12 @@ github.com/globalsign/mgo v0.0.0-20180905125535-1ca0a4f7cbcb/go.mod h1:xkRDCp4j0
458462
github.com/globalsign/mgo v0.0.0-20181015135952-eeefdecb41b8/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q=
459463
github.com/glycerine/go-unsnap-stream v0.0.0-20181221182339-f9677308dec2/go.mod h1:/20jfyN9Y5QPEAprSgKAUr+glWDY39ZiUEAYOEv5dsE=
460464
github.com/glycerine/goconvey v0.0.0-20190410193231-58a59202ab31/go.mod h1:Ogl1Tioa0aV7gstGFO7KhffUsb9M4ydbEbbxpcEDc24=
465+
github.com/go-ap/activitypub v0.0.0-20220615144428-48208c70483b h1:+RjYfEfoZdM3wHFs752dlOpGaoRhwRRyQxjajg08LcQ=
466+
github.com/go-ap/activitypub v0.0.0-20220615144428-48208c70483b/go.mod h1:DE3vvc6Didgfd3k7M1Mos6qMDFNmMrxJmYVMHG9h9Io=
467+
github.com/go-ap/errors v0.0.0-20220615144307-e8bc4a40ae9f h1:kJhGo4NApJP0Lt9lkJnfmuTnRWVFbCynY0kiTxpPUR4=
468+
github.com/go-ap/errors v0.0.0-20220615144307-e8bc4a40ae9f/go.mod h1:KHkKFKZvc05lr79+RGoq/zG8YjWi3+FK60Bxd+mpCew=
469+
github.com/go-ap/jsonld v0.0.0-20220615144122-1d862b15410d h1:Z/oRXMlZHjvjIqDma1FrIGL3iE5YL7MUI0bwYEZ6qbA=
470+
github.com/go-ap/jsonld v0.0.0-20220615144122-1d862b15410d/go.mod h1:jyveZeGw5LaADntW+UEsMjl3IlIwk+DxlYNsbofQkGA=
461471
github.com/go-asn1-ber/asn1-ber v1.5.4 h1:vXT6d/FNDiELJnLb6hGNa309LMsrCoYFvpwHDF0+Y1A=
462472
github.com/go-asn1-ber/asn1-ber v1.5.4/go.mod h1:hEBeB/ic+5LoWskz+yKT7vGhhPYkProFKoKdwZRWMe0=
463473
github.com/go-chi/chi/v5 v5.0.1/go.mod h1:DslCQbL2OYiznFReuXYUmQ2hGd1aDpCnlMNITLSKoi8=
@@ -470,8 +480,8 @@ github.com/go-enry/go-enry/v2 v2.8.2 h1:uiGmC+3K8sVd/6DOe2AOJEOihJdqda83nPyJNtMR
470480
github.com/go-enry/go-enry/v2 v2.8.2/go.mod h1:GVzIiAytiS5uT/QiuakK7TF1u4xDab87Y8V5EJRpsIQ=
471481
github.com/go-enry/go-oniguruma v1.2.1 h1:k8aAMuJfMrqm/56SG2lV9Cfti6tC4x8673aHCcBk+eo=
472482
github.com/go-enry/go-oniguruma v1.2.1/go.mod h1:bWDhYP+S6xZQgiRL7wlTScFYBe023B6ilRZbCAD5Hf4=
473-
github.com/go-fed/httpsig v1.1.0 h1:9M+hb0jkEICD8/cAiNqEB66R87tTINszBRTjwjQzWcI=
474-
github.com/go-fed/httpsig v1.1.0/go.mod h1:RCMrTZvN1bJYtofsG4rd5NaO5obxQ5xBkdiS7xsT7bM=
483+
github.com/go-fed/httpsig v1.1.1-0.20201223112313-55836744818e h1:oRq/fiirun5HqlEWMLIcDmLpIELlG4iGbd0s8iqgPi8=
484+
github.com/go-fed/httpsig v1.1.1-0.20201223112313-55836744818e/go.mod h1:RCMrTZvN1bJYtofsG4rd5NaO5obxQ5xBkdiS7xsT7bM=
475485
github.com/go-git/gcfg v1.5.0 h1:Q5ViNfGF8zFgyJWPqYwA7qGFoMTEiBmdlkcfRmpIMa4=
476486
github.com/go-git/gcfg v1.5.0/go.mod h1:5m20vg6GwYabIxaOonVkTdrILxQMpEShl1xiMF4ua+E=
477487
github.com/go-git/go-billy/v5 v5.2.0/go.mod h1:pmpqyWchKfYfrkb/UVH4otLvyi/5gJlGI4Hb3ZqZ3W0=
@@ -769,6 +779,7 @@ github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLe
769779
github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
770780
github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
771781
github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
782+
github.com/google/pprof v0.0.0-20211214055906-6f57359322fd/go.mod h1:KgnwoLYCZ8IQu3XUZ8Nc/bM9CCZFOyjUNOSygVozoDg=
772783
github.com/google/pprof v0.0.0-20220509035851-59ca7ad80af3 h1:vFrXU7L2gqtlP/ZGijSpaDIc16ZQrZI4FAuYtpQTyQc=
773784
github.com/google/pprof v0.0.0-20220509035851-59ca7ad80af3/go.mod h1:Pt31oes+eGImORns3McJn8zHefuQl2rG8l6xQjGYB4U=
774785
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
@@ -892,6 +903,7 @@ github.com/iancoleman/strcase v0.0.0-20180726023541-3605ed457bf7/go.mod h1:SK73t
892903
github.com/iancoleman/strcase v0.2.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho=
893904
github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
894905
github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
906+
github.com/ianlancetaylor/demangle v0.0.0-20210905161508-09a460cdf81d/go.mod h1:aYm2/VgdVmcIU8iMfdMvDMsRAQjcfZSKFby6HOFvi/w=
895907
github.com/imdario/mergo v0.3.4/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA=
896908
github.com/imdario/mergo v0.3.8/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA=
897909
github.com/imdario/mergo v0.3.9/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA=
@@ -1503,6 +1515,8 @@ github.com/urfave/cli v1.22.9 h1:cv3/KhXGBGjEXLC4bH0sLuJ9BewaAbpk5oyMOveu4pw=
15031515
github.com/urfave/cli v1.22.9/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=
15041516
github.com/urfave/cli/v2 v2.2.0/go.mod h1:SE9GqnLQmjVa0iPEY0f1w3ygNIYcIJ0OKPMoW2caLfQ=
15051517
github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc=
1518+
github.com/valyala/fastjson v1.6.3 h1:tAKFnnwmeMGPbwJ7IwxcTPCNr3uIzoIj3/Fh90ra4xc=
1519+
github.com/valyala/fastjson v1.6.3/go.mod h1:CLCAqky6SMuOcxStkYQvblddUtoRxhYMGLrsQns1aXY=
15061520
github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8=
15071521
github.com/vektah/gqlparser v1.1.2/go.mod h1:1ycwN7Ij5njmMkPPAOaRFY4rET2Enx7IkVv3vaXspKw=
15081522
github.com/weppos/publicsuffix-go v0.13.1-0.20210123135404-5fd73613514e/go.mod h1:HYux0V0Zi04bHNwOHy4cXJVz/TQjYonnF6aoYhj+3QE=
Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
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+
"context"
9+
"fmt"
10+
"net/http"
11+
"net/http/httptest"
12+
"net/url"
13+
"testing"
14+
15+
user_model "code.gitea.io/gitea/models/user"
16+
"code.gitea.io/gitea/modules/activitypub"
17+
"code.gitea.io/gitea/modules/setting"
18+
19+
ap "github.com/go-ap/activitypub"
20+
"github.com/stretchr/testify/assert"
21+
)
22+
23+
func TestActivityPubPerson(t *testing.T) {
24+
onGiteaRun(t, func(*testing.T, *url.URL) {
25+
setting.Federation.Enabled = true
26+
defer func() {
27+
setting.Federation.Enabled = false
28+
}()
29+
30+
username := "user2"
31+
req := NewRequestf(t, "GET", fmt.Sprintf("/api/v1/activitypub/user/%s", username))
32+
resp := MakeRequest(t, req, http.StatusOK)
33+
body := resp.Body.Bytes()
34+
assert.Contains(t, string(body), "@context")
35+
36+
var person ap.Person
37+
err := person.UnmarshalJSON(body)
38+
assert.NoError(t, err)
39+
40+
assert.Equal(t, ap.PersonType, person.Type)
41+
assert.Equal(t, username, person.PreferredUsername.String())
42+
keyID := person.GetID().String()
43+
assert.Regexp(t, fmt.Sprintf("activitypub/user/%s$", username), keyID)
44+
assert.Regexp(t, fmt.Sprintf("activitypub/user/%s/outbox$", username), person.Outbox.GetID().String())
45+
assert.Regexp(t, fmt.Sprintf("activitypub/user/%s/inbox$", username), person.Inbox.GetID().String())
46+
47+
pubKey := person.PublicKey
48+
assert.NotNil(t, pubKey)
49+
publicKeyID := keyID + "#main-key"
50+
assert.Equal(t, pubKey.ID.String(), publicKeyID)
51+
52+
pubKeyPem := pubKey.PublicKeyPem
53+
assert.NotNil(t, pubKeyPem)
54+
assert.Regexp(t, "^-----BEGIN PUBLIC KEY-----", pubKeyPem)
55+
})
56+
}
57+
58+
func TestActivityPubMissingPerson(t *testing.T) {
59+
onGiteaRun(t, func(*testing.T, *url.URL) {
60+
setting.Federation.Enabled = true
61+
defer func() {
62+
setting.Federation.Enabled = false
63+
}()
64+
65+
req := NewRequestf(t, "GET", "/api/v1/activitypub/user/nonexistentuser")
66+
resp := MakeRequest(t, req, http.StatusNotFound)
67+
assert.Contains(t, resp.Body.String(), "user redirect does not exist")
68+
})
69+
}
70+
71+
func TestActivityPubPersonInbox(t *testing.T) {
72+
srv := httptest.NewServer(c)
73+
defer srv.Close()
74+
75+
onGiteaRun(t, func(*testing.T, *url.URL) {
76+
appURL := setting.AppURL
77+
setting.Federation.Enabled = true
78+
setting.AppURL = srv.URL
79+
defer func() {
80+
setting.Federation.Enabled = false
81+
setting.Database.LogSQL = false
82+
setting.AppURL = appURL
83+
}()
84+
username1 := "user1"
85+
ctx := context.Background()
86+
user1, err := user_model.GetUserByName(ctx, username1)
87+
assert.NoError(t, err)
88+
user1url := fmt.Sprintf("%s/api/v1/activitypub/user/%s#main-key", srv.URL, username1)
89+
c, err := activitypub.NewClient(user1, user1url)
90+
assert.NoError(t, err)
91+
username2 := "user2"
92+
user2inboxurl := fmt.Sprintf("%s/api/v1/activitypub/user/%s/inbox", srv.URL, username2)
93+
94+
// Signed request succeeds
95+
resp, err := c.Post([]byte{}, user2inboxurl)
96+
assert.NoError(t, err)
97+
assert.Equal(t, http.StatusNoContent, resp.StatusCode)
98+
99+
// Unsigned request fails
100+
req := NewRequest(t, "POST", user2inboxurl)
101+
MakeRequest(t, req, http.StatusInternalServerError)
102+
})
103+
}

integrations/webfinger_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ func TestWebfinger(t *testing.T) {
5252
var jrd webfingerJRD
5353
DecodeJSON(t, resp, &jrd)
5454
assert.Equal(t, "acct:user2@"+appURL.Host, jrd.Subject)
55-
assert.ElementsMatch(t, []string{user.HTMLURL()}, jrd.Aliases)
55+
assert.ElementsMatch(t, []string{user.HTMLURL(), appURL.String() + "api/v1/activitypub/user/" + url.PathEscape(user.Name)}, jrd.Aliases)
5656

5757
req = NewRequest(t, "GET", fmt.Sprintf("/.well-known/webfinger?resource=acct:%s@%s", user.LowerName, "unknown.host"))
5858
MakeRequest(t, req, http.StatusBadRequest)

models/action.go

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ import (
3030
"code.gitea.io/gitea/modules/util"
3131

3232
"xorm.io/builder"
33+
"xorm.io/xorm/schemas"
3334
)
3435

3536
// ActionType represents the type of an action.
@@ -70,25 +71,36 @@ const (
7071
// used in template render.
7172
type Action struct {
7273
ID int64 `xorm:"pk autoincr"`
73-
UserID int64 `xorm:"INDEX"` // Receiver user id.
74+
UserID int64 // Receiver user id.
7475
OpType ActionType
75-
ActUserID int64 `xorm:"INDEX"` // Action user id.
76-
ActUser *user_model.User `xorm:"-"`
77-
RepoID int64 `xorm:"INDEX"`
76+
ActUserID int64 // Action user id.
77+
ActUser *user_model.User `xorm:"-"`
78+
RepoID int64
7879
Repo *repo_model.Repository `xorm:"-"`
7980
CommentID int64 `xorm:"INDEX"`
8081
Comment *issues_model.Comment `xorm:"-"`
81-
IsDeleted bool `xorm:"INDEX NOT NULL DEFAULT false"`
82+
IsDeleted bool `xorm:"NOT NULL DEFAULT false"`
8283
RefName string
83-
IsPrivate bool `xorm:"INDEX NOT NULL DEFAULT false"`
84+
IsPrivate bool `xorm:"NOT NULL DEFAULT false"`
8485
Content string `xorm:"TEXT"`
85-
CreatedUnix timeutil.TimeStamp `xorm:"INDEX created"`
86+
CreatedUnix timeutil.TimeStamp `xorm:"created"`
8687
}
8788

8889
func init() {
8990
db.RegisterModel(new(Action))
9091
}
9192

93+
// TableIndices implements xorm's TableIndices interface
94+
func (a *Action) TableIndices() []*schemas.Index {
95+
actUserIndex := schemas.NewIndex("au_r_c_u_d", schemas.IndexType)
96+
actUserIndex.AddColumn("act_user_id", "repo_id", "created_unix", "user_id", "is_deleted")
97+
98+
repoIndex := schemas.NewIndex("r_c_u_d", schemas.IndexType)
99+
repoIndex.AddColumn("repo_id", "created_unix", "user_id", "is_deleted")
100+
101+
return []*schemas.Index{actUserIndex, repoIndex}
102+
}
103+
92104
// GetOpType gets the ActionType of this action.
93105
func (a *Action) GetOpType() ActionType {
94106
return a.OpType

models/issues/label.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -733,7 +733,7 @@ func DeleteLabelsByRepoID(ctx context.Context, repoID int64) error {
733733

734734
// CountOrphanedLabels return count of labels witch are broken and not accessible via ui anymore
735735
func CountOrphanedLabels() (int64, error) {
736-
noref, err := db.GetEngine(db.DefaultContext).Table("label").Where("repo_id=? AND org_id=?", 0, 0).Count("label.id")
736+
noref, err := db.GetEngine(db.DefaultContext).Table("label").Where("repo_id=? AND org_id=?", 0, 0).Count()
737737
if err != nil {
738738
return 0, err
739739
}

0 commit comments

Comments
 (0)