mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2025-10-24 02:52:37 +00:00
- Change the values for the nodeinfo API, to use branded values. - Resolves https://codeberg.org/forgejo/forgejo/issues/257 (cherry picked from commit4608c57688) (cherry picked from commite837e8a529) (cherry picked from commit6601328d3c) (cherry picked from commitc6be21d487) (cherry picked from commit5adc6ffee2) (cherry picked from commit2ff8d166ac) (cherry picked from commitb6a90e7e5a) (cherry picked from commitd1089e706c) Conflicts: tests/integration/api_nodeinfo_test.go (cherry picked from commit7a29df737d) (cherry picked from commit3655a30c60) (cherry picked from commitc90d611410) (cherry picked from commit0274bd8860) (cherry picked from commitfdb786b71d) (cherry picked from commit4f08f100a1) (cherry picked from commit56a2711822) (cherry picked from commit3b2cfa452d) (cherry picked from commit773ddcf956) (cherry picked from commitb3c12e6bcc) (cherry picked from commit1315177082) (cherry picked from commit3f1007795c) (cherry picked from commit352bda0147) (cherry picked from commit3d8c153ded)
82 lines
2.5 KiB
Go
82 lines
2.5 KiB
Go
// Copyright 2021 The Gitea Authors. All rights reserved.
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
package misc
|
|
|
|
import (
|
|
"net/http"
|
|
"time"
|
|
|
|
issues_model "code.gitea.io/gitea/models/issues"
|
|
user_model "code.gitea.io/gitea/models/user"
|
|
"code.gitea.io/gitea/modules/context"
|
|
"code.gitea.io/gitea/modules/setting"
|
|
"code.gitea.io/gitea/modules/structs"
|
|
)
|
|
|
|
const cacheKeyNodeInfoUsage = "API_NodeInfoUsage"
|
|
|
|
// NodeInfo returns the NodeInfo for the Gitea instance to allow for federation
|
|
func NodeInfo(ctx *context.APIContext) {
|
|
// swagger:operation GET /nodeinfo miscellaneous getNodeInfo
|
|
// ---
|
|
// summary: Returns the nodeinfo of the Gitea application
|
|
// produces:
|
|
// - application/json
|
|
// responses:
|
|
// "200":
|
|
// "$ref": "#/responses/NodeInfo"
|
|
|
|
nodeInfoUsage := structs.NodeInfoUsage{}
|
|
if setting.Federation.ShareUserStatistics {
|
|
cached := false
|
|
if setting.CacheService.Enabled {
|
|
nodeInfoUsage, cached = ctx.Cache.Get(cacheKeyNodeInfoUsage).(structs.NodeInfoUsage)
|
|
}
|
|
if !cached {
|
|
usersTotal := int(user_model.CountUsers(nil))
|
|
now := time.Now()
|
|
timeOneMonthAgo := now.AddDate(0, -1, 0).Unix()
|
|
timeHaveYearAgo := now.AddDate(0, -6, 0).Unix()
|
|
usersActiveMonth := int(user_model.CountUsers(&user_model.CountUserFilter{LastLoginSince: &timeOneMonthAgo}))
|
|
usersActiveHalfyear := int(user_model.CountUsers(&user_model.CountUserFilter{LastLoginSince: &timeHaveYearAgo}))
|
|
|
|
allIssues, _ := issues_model.CountIssues(ctx, &issues_model.IssuesOptions{})
|
|
allComments, _ := issues_model.CountComments(&issues_model.FindCommentsOptions{})
|
|
|
|
nodeInfoUsage = structs.NodeInfoUsage{
|
|
Users: structs.NodeInfoUsageUsers{
|
|
Total: usersTotal,
|
|
ActiveMonth: usersActiveMonth,
|
|
ActiveHalfyear: usersActiveHalfyear,
|
|
},
|
|
LocalPosts: int(allIssues),
|
|
LocalComments: int(allComments),
|
|
}
|
|
if setting.CacheService.Enabled {
|
|
if err := ctx.Cache.Put(cacheKeyNodeInfoUsage, nodeInfoUsage, 180); err != nil {
|
|
ctx.InternalServerError(err)
|
|
return
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
nodeInfo := &structs.NodeInfo{
|
|
Version: "2.1",
|
|
Software: structs.NodeInfoSoftware{
|
|
Name: "forgejo",
|
|
Version: setting.AppVer,
|
|
Repository: "https://codeberg.org/forgejo/forgejo.git",
|
|
Homepage: "https://forgejo.org/",
|
|
},
|
|
Protocols: []string{"activitypub"},
|
|
Services: structs.NodeInfoServices{
|
|
Inbound: []string{},
|
|
Outbound: []string{"rss2.0"},
|
|
},
|
|
OpenRegistrations: setting.Service.ShowRegistrationButton,
|
|
Usage: nodeInfoUsage,
|
|
}
|
|
ctx.JSON(http.StatusOK, nodeInfo)
|
|
}
|