From ca5eaa8c6b53031c9ca7f124788f2d2bb09ac70d Mon Sep 17 00:00:00 2001 From: Michael Jerger Date: Sat, 13 Jan 2024 16:08:12 +0100 Subject: [PATCH] introduce FI Factory --- models/forgefed/federationinfo.go | 12 ++++++++++++ routers/api/v1/activitypub/repository.go | 13 ++++--------- 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/models/forgefed/federationinfo.go b/models/forgefed/federationinfo.go index a24898495c..80380641b9 100644 --- a/models/forgefed/federationinfo.go +++ b/models/forgefed/federationinfo.go @@ -21,6 +21,18 @@ type FederationInfo struct { Updated timeutil.TimeStamp `xorm:"updated"` } +// Factory function for PersonID. Created struct is asserted to be valid +func NewFederationInfo(nodeInfo NodeInfo, hostFqdn string) (FederationInfo, error) { + result := FederationInfo{ + HostFqdn: hostFqdn, + NodeInfo: nodeInfo, + } + if valid, err := validation.IsValid(result); !valid { + return FederationInfo{}, err + } + return result, nil +} + // Validate collects error strings in a slice and returns this func (info FederationInfo) Validate() []string { var result []string diff --git a/routers/api/v1/activitypub/repository.go b/routers/api/v1/activitypub/repository.go index d5674ebb9a..bcc498a83d 100644 --- a/routers/api/v1/activitypub/repository.go +++ b/routers/api/v1/activitypub/repository.go @@ -1,11 +1,8 @@ -// Copyright 2023 The forgejo Authors. All rights reserved. +// Copyright 2023, 2024 The forgejo Authors. All rights reserved. // SPDX-License-Identifier: MIT package activitypub -// ToDo: Fix linting -// ToDo: Maybe do a request for the node info -// Then maybe save the node info in a DB table - this could be useful for validation import ( "fmt" "net/http" @@ -231,11 +228,9 @@ func createFederationInfo(ctx *context.APIContext, actorID forgefed.ActorID) (fo if err != nil { return forgefed.FederationInfo{}, err } - // TODO: introduce a NewFederationInfo factory method here. - // it should convert host to lower-case. - result := forgefed.FederationInfo{ - HostFqdn: actorID.Host, - NodeInfo: nodeInfo, + result, err := forgefed.NewFederationInfo(nodeInfo, actorID.Host) + if err != nil { + return forgefed.FederationInfo{}, err } err = forgefed.CreateFederationInfo(ctx, result) if err != nil {