_api

package
v0.0.0-...-e9843d3 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 28, 2026 License: GPL-3.0 Imports: 36 Imported by: 0

Documentation

Index

Constants

View Source
const MaxFidSeqCount = 100
View Source
const SetCookiePath = "/api"

Variables

View Source
var BackupAllowOptionKeys = []string{"go_bark_key", "go_daily_report", "go_daily_report_status", "go_message_type", "go_ntfy_topic", "go_pushdeer_key", "kd_growth_break_icon_tasks", "kd_growth_ext_tasks", "kd_growth_sign_only", "kd_wenku_tasks_checkin_only", "kd_wenku_tasks_vip_matrix", "kd_wenku_tasks_vip_matrix_id_set", "ver4_rank_check", "ver4_lottery_check", "ver4_ban_open", "kd_renew_manager_alert", "kd_renew_manager_interval", "kd_renew_manager_open"}
View Source
var BackupUsersOptionDangerKeys = []string{"session_expired_at"}
View Source
var BackupUsersOptionKeys = []string{"go_bark_key", "go_daily_report", "go_message_type", "go_ntfy_topic", "go_pushdeer_key"}
View Source
var FaviconBinCache []byte
View Source
var FaviconCacheTime time.Time
View Source
var IndependentFEPath = []string{"/robots.txt", "/favicon.ico", "/icp.jsonp", "/site.jsonp"}
View Source
var NoFavicon = false
View Source
var RequestSingleFlight singleflight.Group
View Source
var SettingsRules = map[string]*_function.OptionRule{
	"sign_mode": {
		Custom: func(val string) error {
			if val == "" {
				return nil
			}
			signMode := strings.SplitSeq(val, ",")
			for v := range signMode {
				if !slices.Contains([]string{"1", "2", "3"}, v) {
					return errors.New("invalid value " + v)
				}
			}
			return nil
		},
		Transform: func(val string) string {
			signMode := strings.Split(val, ",")

			if len(signMode) == 0 {
				signMode = append(signMode, "1")
			}

			return encodeSignMode(signMode)
		},
	},
	"mail_auth":                   {Enum: []string{"0", "1", "2"}},
	"enable_reg":                  {Enum: []string{"0", "1"}},
	"go_export_personal_data":     {Enum: []string{"0", "1"}},
	"go_import_personal_data":     {Enum: []string{"0", "1"}},
	"mail_secure":                 {Enum: []string{"none", "ssl", "tls"}},
	"cron_limit":                  {Min: _function.VPtr(int64(0))},
	"retry_max":                   {Min: _function.VPtr(int64(0))},
	"sign_sleep":                  {Min: _function.VPtr(int64(0))},
	"sign_multith":                {Min: _function.VPtr(int64(0))},
	"mail_port":                   {Min: _function.VPtr(int64(0)), Max: _function.VPtr(int64(65535))},
	"cktime":                      {Min: _function.VPtr(int64(0))},
	"go_re_check_in_max_interval": {Min: _function.VPtr(int64(1))},

	"sign_hour":            {Min: _function.VPtr(int64(-1)), Max: _function.VPtr(int64(23))},
	"go_daily_report_hour": {Min: _function.VPtr(int64(-1)), Max: _function.VPtr(int64(23))},

	"go_forum_sync_policy": {
		Enum: []string{"add_delete", "add_only", ""},
		Transform: func(val string) string {
			if val == "" {
				return "add_only"
			}
			return val
		},
	},

	"go_ntfy_addr":     {IsURL: true},
	"go_bark_addr":     {IsURL: true},
	"go_pushdeer_addr": {IsURL: true},

	"bduss_num": {Min: _function.VPtr(int64(-1)), Max: _function.VPtr(int64(999999999))},

	"go_favicon": {
		Custom: func(s string) error {
			if s == "" {
				return nil
			}

			if !strings.HasPrefix(s, "data:image/x-icon;base64,") {
				return errors.New("invalid favicon")
			}
			s = strings.TrimPrefix(s, "data:image/x-icon;base64,")
			if len(s) == 0 {
				return errors.New("invalid favicon")
			}

			icoBin, err := base64.StdEncoding.DecodeString(s)
			if err != nil {
				return errors.New("invalid favicon")
			}

			if len(icoBin) < 6 {
				return errors.New("invalid favicon")
			}

			reserved := binary.LittleEndian.Uint16(icoBin[0:2])
			typ := binary.LittleEndian.Uint16(icoBin[2:4])
			count := binary.LittleEndian.Uint16(icoBin[4:6])

			if reserved == 0 &&
				typ == 1 &&
				count > 0 {
				return nil
			}

			return errors.New("invalid favicon")
		},
		Transform: func(s string) string {
			if s == "" {
				FaviconBinCache = []byte{}
			} else {
				FaviconBinCache, _ = base64.StdEncoding.DecodeString(strings.TrimPrefix(s, "data:image/x-icon;base64,"))
				FaviconCacheTime = time.Now()
			}
			return s
		},
	},
}

Functions

func AddTieba

func AddTieba(c *echo.Context) error

func AddTiebaAccount

func AddTiebaAccount(c *echo.Context) error

func AdminCheck

func AdminCheck(next echo.HandlerFunc) echo.HandlerFunc

func AdminDeleteAccount

func AdminDeleteAccount(c *echo.Context) error

func AdminDeleteAccountToken

func AdminDeleteAccountToken(c *echo.Context) error

func AdminDeleteTiebaAccountList

func AdminDeleteTiebaAccountList(c *echo.Context) error

func AdminModifyAccountInfo

func AdminModifyAccountInfo(c *echo.Context) error

func AdminResetAccountPlugin

func AdminResetAccountPlugin(c *echo.Context) error

func AdminResetPassword

func AdminResetPassword(c *echo.Context) error

func AdminResetTiebaList

func AdminResetTiebaList(c *echo.Context) error

func Api

func Api(ctx context.Context, network, address string)

func AuthCheck

func AuthCheck(next echo.HandlerFunc) echo.HandlerFunc

func CheckIsManager

func CheckIsManager(c *echo.Context) error

func CheckTiebaAccount

func CheckTiebaAccount(c *echo.Context) error

func CleanTiebaList

func CleanTiebaList(c *echo.Context) error

func DecryptDB

func DecryptDB(c *echo.Context) error

func DeleteAccount

func DeleteAccount(c *echo.Context) error

func DeleteSessionExpiredAt

func DeleteSessionExpiredAt(uid string) (bool, error)

func EncryptDB

func EncryptDB(c *echo.Context) error

func ExportAccountData

func ExportAccountData(c *echo.Context) error

func ForumListObj2Arr

func ForumListObj2Arr(tiebaList []*model.TcTieba) [][9]any

func GetAccountInfo

func GetAccountInfo(c *echo.Context) error

func GetAccountsList

func GetAccountsList(c *echo.Context) error

func GetAdminSettings

func GetAdminSettings(c *echo.Context) error

func GetBDUSS

func GetBDUSS(c *echo.Context) error

func GetBodyMap

func GetBodyMap(c *echo.Context) (map[string][]string, error)

func GetCronJobs

func GetCronJobs(c *echo.Context) error

func GetFidByFname

func GetFidByFname(c *echo.Context) error

func GetForumStatus

func GetForumStatus(c *echo.Context) error

func GetLoginPageConfig

func GetLoginPageConfig(c *echo.Context) error

func GetLoginQRCode

func GetLoginQRCode(c *echo.Context) error

func GetNotifications

func GetNotifications(c *echo.Context) error

func GetPluginSettings

func GetPluginSettings(c *echo.Context) error

func GetPluginsList

func GetPluginsList(c *echo.Context) error

func GetReleases

func GetReleases(c *echo.Context) error

func GetServerStatus

func GetServerStatus(c *echo.Context) error

func GetSessionExpiredAt

func GetSessionExpiredAt(uid string) int64

func GetSettings

func GetSettings(c *echo.Context) error

func GetTiebaAccountItem

func GetTiebaAccountItem(c *echo.Context) error

func GetTiebaAccountList

func GetTiebaAccountList(c *echo.Context) error

func GetTiebaList

func GetTiebaList(c *echo.Context) error

func GetUserByTiebaUID

func GetUserByTiebaUID(c *echo.Context) error

func GetUserByUsernameOrPortrait

func GetUserByUsernameOrPortrait(c *echo.Context) error

func HmacSessionToken

func HmacSessionToken(uid, password, expiredAt string) []byte

func IgnoreTieba

func IgnoreTieba(c *echo.Context) error

func ImportAccountData

func ImportAccountData(c *echo.Context) error

func IsAPIPath

func IsAPIPath(c *echo.Context) bool

func IsArrayMode

func IsArrayMode(c *echo.Context) bool

func Login

func Login(c *echo.Context) error

func Logout

func Logout(c *echo.Context) error

func ParsePath

func ParsePath(next echo.HandlerFunc) echo.HandlerFunc

func PluginPathPrecheck

func PluginPathPrecheck(next echo.HandlerFunc) echo.HandlerFunc

func PluginSwitch

func PluginSwitch(c *echo.Context) error

func PluginUninstall

func PluginUninstall(c *echo.Context) error

func RateLimit

func RateLimit(_rate int, expiresIn time.Duration) echo.MiddlewareFunc

func RefreshTiebaList

func RefreshTiebaList(c *echo.Context) error

func RemoveTieba

func RemoveTieba(c *echo.Context) error

func RemoveTiebaAccount

func RemoveTiebaAccount(c *echo.Context) error

func ResetAccountPlugin

func ResetAccountPlugin(c *echo.Context) error

func ResetAdminSettings

func ResetAdminSettings(c *echo.Context) error

func ResetMessageBuilder

func ResetMessageBuilder(uid int32, forceMode bool) *_function.VerifyCodeStruct

func ResetPassword

func ResetPassword(c *echo.Context) error

func ResetTieba

func ResetTieba(c *echo.Context) error

func RunCronJob

func RunCronJob(c *echo.Context) error

func SendResetMessage

func SendResetMessage(uid int32, pushType string, forceMode bool) (string, error)

func SendTestMessage

func SendTestMessage(c *echo.Context) error

func SetHeaders

func SetHeaders(next echo.HandlerFunc) echo.HandlerFunc

func ShutdownSystem

func ShutdownSystem(c *echo.Context) error

func Signup

func Signup(c *echo.Context) error

func UpdateAccountInfo

func UpdateAccountInfo(c *echo.Context) error

func UpdateAdminSettings

func UpdateAdminSettings(c *echo.Context) error

func UpdatePassword

func UpdatePassword(c *echo.Context) error

func UpdatePluginSettings

func UpdatePluginSettings(c *echo.Context) error

func UpdateSessionExpiredAt

func UpdateSessionExpiredAt(uid string, t int64) (int64, error)

func UpdateSettings

func UpdateSettings(c *echo.Context) error

TODO verify password

func UpgradeSystem

func UpgradeSystem(c *echo.Context) error

func UpgradeSystem2

func UpgradeSystem2(c *echo.Context) error

Types

type CronJob

type CronJob struct {
	ID              string   `json:"id"`
	Name            string   `json:"name"`
	Tags            []string `json:"tags"`
	LastStartAt     int64    `json:"last_start_at"`
	LastCompletedAt int64    `json:"last_completed_at"`
	NextTime        int64    `json:"next_time"`
	Running         bool     `json:"running"`
}

type FESettings

type FESettings struct {
	SystemName        string `json:"system_name"`
	SystemKeywords    string `json:"system_keywords"`
	SystemDescription string `json:"system_description"`
	Footer            string `json:"footer"`
	ICP               string `json:"icp"`
}

type ICPStruct

type ICPStruct struct {
	ICP string `json:"icp"`
}

type ModifyForumIDList

type ModifyForumIDList struct {
	InvalidFid []string `json:"invalid_fid"`
	ValidFid   []int64  `json:"valid_fid"`
}

func VerifyFidList

func VerifyFidList(fid string) ModifyForumIDList

type PluginListContent

type PluginListContent struct {
	Name   string `json:"name"`
	Ver    string `json:"ver"`
	Status bool   `json:"status"`
	Test   bool   `json:"test,omitempty"`

	PluginNameCN      string `json:"plugin_name_cn"`
	PluginNameCNShort string `json:"plugin_name_cn_short"`
	PluginNameFE      string `json:"plugin_name_fe"`

	SettingOptions []PluginListSettingOption `json:"setting_options,omitempty"`
}

type PluginListSettingOption

type PluginListSettingOption struct {
	OptionName   string `json:"option_name"`
	OptionNameCN string `json:"option_name_cn"`
}

type ResetAccountPluginParams

type ResetAccountPluginParams struct {
	PluginName string `param:"plugin_name"`
	Pid        uint64 `param:"pid"`
	Tid        uint64 `param:"tid"`
}

type SiteAccountsResponse

type SiteAccountsResponse struct {
	ID    int32  `json:"id"`
	Name  string `json:"name"`
	Email string `json:"email"`
	Role  string `json:"role"`
	T     string `json:"t"`

	BaiduAccountCount int `json:"baidu_account_count"`
	ForumCount        int `json:"forum_count"`

	// checkin status
	CheckinSuccess int `json:"checkin_success"`
	CheckinFailed  int `json:"checkin_failed"`
	CheckinWaiting int `json:"checkin_waiting"`
	CheckinIgnore  int `json:"checkin_ignore"`
}

type TcBackupExportStructTcBaiduid

type TcBackupExportStructTcBaiduid struct {
	*model.TcBaiduid
	Bduss  string `gorm:"column:bduss;type:text;not null" json:"bduss"`
	Stoken string `gorm:"column:stoken;type:text;not null" json:"stoken"`
}

type TcBackupExportStructTcTieba

type TcBackupExportStructTcTieba struct {
	*model.TcTieba
	No bool `json:"no"`
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL