WIP Refactoring and solving (adding) ToDos

This commit is contained in:
erik 2024-04-12 14:33:47 +02:00
parent fb1d0df791
commit 71141a5ff3
9 changed files with 19 additions and 19 deletions

View file

@ -21,7 +21,6 @@ type ForgeLike struct {
func NewForgeLike(actorIRI, objectIRI string, startTime time.Time) (ForgeLike, error) { func NewForgeLike(actorIRI, objectIRI string, startTime time.Time) (ForgeLike, error) {
result := ForgeLike{} result := ForgeLike{}
result.Type = ap.LikeType result.Type = ap.LikeType
// ToDo: Would validating the source by Actor.Type field make sense?
result.Actor = ap.IRI(actorIRI) // Thats us, a User result.Actor = ap.IRI(actorIRI) // Thats us, a User
result.Object = ap.IRI(objectIRI) // Thats them, a Repository result.Object = ap.IRI(objectIRI) // Thats them, a Repository
result.StartTime = startTime result.StartTime = startTime

View file

@ -14,7 +14,7 @@ func Test_FederationHostValidation(t *testing.T) {
sut := FederationHost{ sut := FederationHost{
HostFqdn: "host.do.main", HostFqdn: "host.do.main",
NodeInfo: NodeInfo{ NodeInfo: NodeInfo{
Source: "forgejo", SoftwareName: "forgejo",
}, },
LatestActivity: time.Now(), LatestActivity: time.Now(),
} }
@ -34,7 +34,7 @@ func Test_FederationHostValidation(t *testing.T) {
sut = FederationHost{ sut = FederationHost{
HostFqdn: "host.do.main", HostFqdn: "host.do.main",
NodeInfo: NodeInfo{ NodeInfo: NodeInfo{
Source: "forgejo", SoftwareName: "forgejo",
}, },
LatestActivity: time.Now().Add(1 * time.Hour), LatestActivity: time.Now().Add(1 * time.Hour),
} }
@ -45,7 +45,7 @@ func Test_FederationHostValidation(t *testing.T) {
sut = FederationHost{ sut = FederationHost{
HostFqdn: "hOst.do.main", HostFqdn: "hOst.do.main",
NodeInfo: NodeInfo{ NodeInfo: NodeInfo{
Source: "forgejo", SoftwareName: "forgejo",
}, },
LatestActivity: time.Now(), LatestActivity: time.Now(),
} }

View file

@ -12,13 +12,14 @@ import (
"github.com/valyala/fastjson" "github.com/valyala/fastjson"
) )
// ToDo: Search for full text SourceType and Source, also in .md files
type ( type (
SourceType string SoftwareNameType string
) )
const ( const (
ForgejoSourceType SourceType = "forgejo" ForgejoSourceType SoftwareNameType = "forgejo"
GiteaSourceType SourceType = "gitea" GiteaSourceType SoftwareNameType = "gitea"
) )
var KnownSourceTypes = []any{ var KnownSourceTypes = []any{
@ -97,7 +98,7 @@ func (id ActorID) AsWellKnownNodeInfoURI() string {
// NodeInfo data type // NodeInfo data type
// swagger:model // swagger:model
type NodeInfo struct { type NodeInfo struct {
Source SourceType SoftwareName SoftwareNameType
} }
func NodeInfoUnmarshalJSON(data []byte) (NodeInfo, error) { func NodeInfoUnmarshalJSON(data []byte) (NodeInfo, error) {
@ -108,7 +109,7 @@ func NodeInfoUnmarshalJSON(data []byte) (NodeInfo, error) {
} }
source := string(val.GetStringBytes("software", "name")) source := string(val.GetStringBytes("software", "name"))
result := NodeInfo{} result := NodeInfo{}
result.Source = SourceType(source) result.SoftwareName = SoftwareNameType(source)
return result, nil return result, nil
} }
@ -127,8 +128,8 @@ func NewNodeInfo(body []byte) (NodeInfo, error) {
// Validate collects error strings in a slice and returns this // Validate collects error strings in a slice and returns this
func (node NodeInfo) Validate() []string { func (node NodeInfo) Validate() []string {
var result []string var result []string
result = append(result, validation.ValidateNotEmpty(string(node.Source), "source")...) result = append(result, validation.ValidateNotEmpty(string(node.SoftwareName), "source")...)
result = append(result, validation.ValidateOneOf(node.Source, KnownSourceTypes)...) result = append(result, validation.ValidateOneOf(node.SoftwareName, KnownSourceTypes)...)
return result return result
} }

View file

@ -77,7 +77,7 @@ func Test_NewNodeInfoWellKnown(t *testing.T) {
func Test_NewNodeInfo(t *testing.T) { func Test_NewNodeInfo(t *testing.T) {
sut, _ := NewNodeInfo([]byte(`{"version":"2.1","software":{"name":"gitea","version":"1.20.0+dev-2539-g5840cc6d3","repository":"https://github.com/go-gitea/gitea.git","homepage":"https://gitea.io/"},"protocols":["activitypub"],"services":{"inbound":[],"outbound":["rss2.0"]},"openRegistrations":true,"usage":{"users":{"total":13,"activeHalfyear":1,"activeMonth":1}},"metadata":{}}`)) sut, _ := NewNodeInfo([]byte(`{"version":"2.1","software":{"name":"gitea","version":"1.20.0+dev-2539-g5840cc6d3","repository":"https://github.com/go-gitea/gitea.git","homepage":"https://gitea.io/"},"protocols":["activitypub"],"services":{"inbound":[],"outbound":["rss2.0"]},"openRegistrations":true,"usage":{"users":{"total":13,"activeHalfyear":1,"activeMonth":1}},"metadata":{}}`))
expected := NodeInfo{Source: "gitea"} expected := NodeInfo{SoftwareName: "gitea"}
if sut != expected { if sut != expected {
t.Errorf("expected was: %v but was: %v", expected, sut) t.Errorf("expected was: %v but was: %v", expected, sut)
} }

View file

@ -157,7 +157,7 @@ func Star(ctx *context.APIContext) {
// "404": // "404":
// "$ref": "#/responses/notFound" // "$ref": "#/responses/notFound"
err := repository.StarRepoAndFederate(ctx, *ctx.Doer, ctx.Repo.Repository.ID, true) err := repository.StarRepoAndSendLikeActivities(ctx, *ctx.Doer, ctx.Repo.Repository.ID, true)
if err != nil { if err != nil {
ctx.Error(http.StatusInternalServerError, "StarRepo", err) ctx.Error(http.StatusInternalServerError, "StarRepo", err)
return return
@ -188,7 +188,7 @@ func Unstar(ctx *context.APIContext) {
// "404": // "404":
// "$ref": "#/responses/notFound" // "$ref": "#/responses/notFound"
err := repository.StarRepoAndFederate(ctx, *ctx.Doer, ctx.Repo.Repository.ID, false) err := repository.StarRepoAndSendLikeActivities(ctx, *ctx.Doer, ctx.Repo.Repository.ID, false)
if err != nil { if err != nil {
ctx.Error(http.StatusInternalServerError, "StarRepo", err) ctx.Error(http.StatusInternalServerError, "StarRepo", err)
return return

View file

@ -333,7 +333,7 @@ func ActionWatch(watch bool) func(ctx *context.Context) {
func ActionStar(star bool) func(ctx *context.Context) { func ActionStar(star bool) func(ctx *context.Context) {
return func(ctx *context.Context) { return func(ctx *context.Context) {
err := repo_service.StarRepoAndFederate(ctx, *ctx.Doer, ctx.Repo.Repository.ID, star) err := repo_service.StarRepoAndSendLikeActivities(ctx, *ctx.Doer, ctx.Repo.Repository.ID, star)
if err != nil { if err != nil {
ctx.ServerError(fmt.Sprintf("Action (star, %t)", star), err) ctx.ServerError(fmt.Sprintf("Action (star, %t)", star), err)
return return

View file

@ -391,7 +391,7 @@ func SettingsPost(ctx *context.Context) {
ctx.Flash.Info(ctx.Tr("repo.settings.federation_not_enabled")) ctx.Flash.Info(ctx.Tr("repo.settings.federation_not_enabled"))
return return
} }
// ToDo: Rename to followingRepos
federationRepos := strings.TrimSpace(form.FederationRepos) federationRepos := strings.TrimSpace(form.FederationRepos)
federationRepos = strings.TrimSuffix(federationRepos, ";") federationRepos = strings.TrimSuffix(federationRepos, ";")

View file

@ -47,7 +47,7 @@ func ProcessLikeActivity(ctx context.Context, form any, repositoryID int64) (int
if !activity.IsNewer(federationHost.LatestActivity) { if !activity.IsNewer(federationHost.LatestActivity) {
return http.StatusNotAcceptable, "Activity out of order.", fmt.Errorf("Activity already processed") return http.StatusNotAcceptable, "Activity out of order.", fmt.Errorf("Activity already processed")
} }
actorID, err := forgefed.NewPersonID(actorURI, string(federationHost.NodeInfo.Source)) actorID, err := forgefed.NewPersonID(actorURI, string(federationHost.NodeInfo.SoftwareName))
if err != nil { if err != nil {
return http.StatusNotAcceptable, "Invalid PersonID", err return http.StatusNotAcceptable, "Invalid PersonID", err
} }
@ -221,7 +221,7 @@ func StoreFollowingRepoList(ctx context.Context, localRepoID int64, followingRep
if err != nil { if err != nil {
return http.StatusInternalServerError, "Wrong FederationHost", err return http.StatusInternalServerError, "Wrong FederationHost", err
} }
followingRepoID, err := forgefed.NewRepositoryID(uri, string(federationHost.NodeInfo.Source)) followingRepoID, err := forgefed.NewRepositoryID(uri, string(federationHost.NodeInfo.SoftwareName))
if err != nil { if err != nil {
return http.StatusNotAcceptable, "Invalid federated repo", err return http.StatusNotAcceptable, "Invalid federated repo", err
} }

View file

@ -113,7 +113,7 @@ type RepoSettingForm struct {
RepoName string `binding:"Required;AlphaDashDot;MaxSize(100)"` RepoName string `binding:"Required;AlphaDashDot;MaxSize(100)"`
Description string `binding:"MaxSize(2048)"` Description string `binding:"MaxSize(2048)"`
Website string `binding:"ValidUrl;MaxSize(1024)"` Website string `binding:"ValidUrl;MaxSize(1024)"`
// ToDo: Refactor in template and i18n labels to Following Repos
FederationRepos string FederationRepos string
Interval string Interval string
MirrorAddress string MirrorAddress string