2024-05-07 17:58:13 +02:00
// Copyright 2024 The Forgejo Authors. All rights reserved.
// SPDX-License-Identifier: MIT
package forgefed
import (
"fmt"
"strings"
"time"
"code.gitea.io/gitea/modules/timeutil"
"code.gitea.io/gitea/modules/validation"
)
// FederationHost data type
// swagger:model
type FederationHost struct {
ID int64 ` xorm:"pk autoincr" `
HostFqdn string ` xorm:"host_fqdn UNIQUE INDEX VARCHAR(255) NOT NULL" `
NodeInfo NodeInfo ` xorm:"extends NOT NULL" `
LatestActivity time . Time ` xorm:"NOT NULL" `
2024-05-14 08:24:31 +02:00
Created timeutil . TimeStamp ` xorm:"created" `
2024-05-07 17:58:13 +02:00
Updated timeutil . TimeStamp ` xorm:"updated" `
}
2024-05-14 08:24:31 +02:00
// Factory function for FederationHost. Created struct is asserted to be valid.
2024-05-07 17:58:13 +02:00
func NewFederationHost ( nodeInfo NodeInfo , hostFqdn string ) ( FederationHost , error ) {
result := FederationHost {
HostFqdn : strings . ToLower ( hostFqdn ) ,
NodeInfo : nodeInfo ,
}
if valid , err := validation . IsValid ( result ) ; ! valid {
return FederationHost { } , err
}
return result , nil
}
// Validate collects error strings in a slice and returns this
func ( host FederationHost ) Validate ( ) [ ] string {
var result [ ] string
result = append ( result , validation . ValidateNotEmpty ( host . HostFqdn , "HostFqdn" ) ... )
result = append ( result , validation . ValidateMaxLen ( host . HostFqdn , 255 , "HostFqdn" ) ... )
result = append ( result , host . NodeInfo . Validate ( ) ... )
if host . HostFqdn != strings . ToLower ( host . HostFqdn ) {
result = append ( result , fmt . Sprintf ( "HostFqdn has to be lower case but was: %v" , host . HostFqdn ) )
}
if ! host . LatestActivity . IsZero ( ) && host . LatestActivity . After ( time . Now ( ) . Add ( 10 * time . Minute ) ) {
2024-05-14 08:24:31 +02:00
result = append ( result , fmt . Sprintf ( "Latest Activity cannot be in the far future: %v" , host . LatestActivity ) )
2024-05-07 17:58:13 +02:00
}
return result
}