1
0
Fork 0
mirror of https://codeberg.org/june64/mrvc.git synced 2026-01-10 16:06:33 +01:00

refactor config building into separate package for better organization

This commit is contained in:
June 2025-08-16 18:48:39 +02:00
commit 5ca794f435
Signed by: june
SSH key fingerprint: SHA256:o9EAq4Y9N9K0pBQeBTqhSDrND5E7oB+60ZNx0U1yPe0
2 changed files with 132 additions and 78 deletions

87
main.go
View file

@ -2,22 +2,20 @@ package main
import (
"context"
"flag"
"fmt"
"log"
"os"
"slices"
"sort"
"strconv"
"strings"
"sync"
"time"
"github.com/hashicorp/go-version"
"github.com/matrix-org/gomatrixserverlib/fclient"
"github.com/matrix-org/gomatrixserverlib/spec"
"maunium.net/go/mautrix"
"maunium.net/go/mautrix/id"
"codeberg.org/june64/mrvc/config"
)
type HomeserverServerVersionInfo struct {
@ -36,12 +34,6 @@ type VersionPath struct {
Version string
}
var userIdFlag = flag.String("user-id", "", "The Matrix user ID to use. (EnvVar: MRVC_USER_ID)")
var tokenFlag = flag.String("token", "", "The Matrix access token to use. (EnvVar: MRVC_TOKEN)")
var roomFlag = flag.String("room", "", "The Matrix room to check. (EnvVar: MRVC_ROOM)")
var printHomeserverMemberCountFlag = flag.Bool("print-homeserver-member-count", false, "Print the member count for each homeserver. (EnvVar: MRVC_PRINT_HOMESERVER_MEMBER_COUNT)")
var homeserverVersionInfoTimeoutFlag = flag.Duration("homeserver-version-info-timeout", time.Second*5, "Timeout for getting the homeservers version information per homeserver. (EnvVar: MRVC_HOMESERVER_VERSION_INFO_TIMEOUT)")
var unknownServerVersionInfo = fclient.Version{
Server: struct {
Name string `json:"name"`
@ -289,70 +281,9 @@ func compareVersionStrings(a, b string) int {
}
func main() {
flag.Parse()
config := config.Get()
// Configuration variables.
var userIdString, token, room string
var printHomeserverMemberCount bool
var homeserverVersionInfoTimeout time.Duration
visitedFlags := make(map[string]bool)
flag.Visit(func(visitedFlag *flag.Flag) {
visitedFlags[visitedFlag.Name] = true
})
// Assign flag and environment variable values to configuration variables.
// Flags take precedence over environment variables.
// This also ensures some configuration options got explicitly set.
if visitedFlags["user-id"] {
userIdString = *userIdFlag
} else if userIdEnvVar, ok := os.LookupEnv("MRVC_USER_ID"); ok {
userIdString = userIdEnvVar
} else {
log.Fatal("A Matrix user ID must be provided.")
}
if visitedFlags["token"] {
token = *tokenFlag
} else if tokenEnvVar, ok := os.LookupEnv("MRVC_TOKEN"); ok {
token = tokenEnvVar
} else {
log.Fatal("A Matrix access token must be provided.")
}
if visitedFlags["room"] {
room = *roomFlag
} else if roomEnvVar, ok := os.LookupEnv("MRVC_ROOM"); ok {
room = roomEnvVar
} else {
log.Fatal("A Matrix room must be provided.")
}
if visitedFlags["print-homeserver-member-count"] {
printHomeserverMemberCount = *printHomeserverMemberCountFlag
} else if printHomeserverMemberCountEnvVar, ok := os.LookupEnv("MRVC_PRINT_HOMESERVER_MEMBER_COUNT"); ok {
parsedPrintHomeserverMemberCountEnvVar, err := strconv.ParseBool(printHomeserverMemberCountEnvVar)
if err != nil {
log.Println("Error parsing MRVC_PRINT_HOMESERVER_MEMBER_COUNT:")
log.Fatal(err)
}
printHomeserverMemberCount = parsedPrintHomeserverMemberCountEnvVar
} else {
// The flag holds the default value.
printHomeserverMemberCount = *printHomeserverMemberCountFlag
}
if visitedFlags["homeserver-version-info-timeout"] {
homeserverVersionInfoTimeout = *homeserverVersionInfoTimeoutFlag
} else if homeserverVersionInfoTimeoutEnvVar, ok := os.LookupEnv("MRVC_HOMESERVER_VERSION_INFO_TIMEOUT"); ok {
parsedHomeserverVersionInfoTimeoutEnvVar, err := time.ParseDuration(homeserverVersionInfoTimeoutEnvVar)
if err != nil {
log.Println("Error parsing MRVC_HOMESERVER_VERSION_INFO_TIMEOUT:")
log.Fatal(err)
}
homeserverVersionInfoTimeout = parsedHomeserverVersionInfoTimeoutEnvVar
} else {
// The flag holds the default value.
homeserverVersionInfoTimeout = *homeserverVersionInfoTimeoutFlag
}
userId := id.UserID(userIdString)
userId := id.UserID(config.UserID)
_, homeserver, err := userId.ParseAndValidate()
if err != nil {
log.Fatal(err)
@ -360,17 +291,17 @@ func main() {
client, err := mautrix.NewClient(
homeserver,
userId,
token,
config.Token,
)
if err != nil {
log.Fatal(err)
}
federationClient := fclient.NewClient(
fclient.WithWellKnownSRVLookups(true),
fclient.WithTimeout(homeserverVersionInfoTimeout),
fclient.WithTimeout(config.HomeserverVersionInfoTimeout),
)
joinedMembers, err := client.JoinedMembers(context.Background(), id.RoomID(room))
joinedMembers, err := client.JoinedMembers(context.Background(), id.RoomID(config.Room))
if err != nil {
log.Fatal(err)
}
@ -424,7 +355,7 @@ func main() {
}
fmt.Println("Room:")
fmt.Printf("%s -> %d\n\n", room, len(joinedMembers.Joined))
fmt.Printf("%s -> %d\n\n", config.Room, len(joinedMembers.Joined))
fmt.Println("Version Support:")
@ -458,7 +389,7 @@ func main() {
fmt.Printf(" %s -> %d\n", versionKey, membersByVersionPath[VersionPath{maxRoomVersionKey, serverKey, versionKey}])
if printHomeserverMemberCount {
if config.PrintHomeserverMemberCount {
homeserverKeys := make([]string, 0, len(versionValue))
for key := range versionValue {
homeserverKeys = append(homeserverKeys, key)