api

package
v0.33.0 Latest Latest
Warning

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

Go to latest
Published: Oct 20, 2023 License: GPL-3.0 Imports: 34 Imported by: 0

Documentation

Index

Constants

View Source
const (
	DEFAULT_MAX_ARTICLE_BLOCK_LIST = 1
	DEFAULT_MAX_LIST               = 200
	DEFAULT_DESCENDING             = true
	DEFAULT_ASCENDING              = true

	ARTICLE_LOCK_TS          = 10
	ARTICLE_LOCK_TS_DURATION = time.Duration(ARTICLE_LOCK_TS) * time.Second
	ARTICLE_LOCK_NANO_TS     = types.NanoTS(ARTICLE_LOCK_TS) * types.TS_TO_NANO_TS

	HTML_CACHE_CONTROL_TS = 3600
	JS_CACHE_CONTROL_TS   = 86400 * 365

	OFFSET_MTIME_NANO_TS = 1000000000 // 1 second
)
View Source
const (
	ROOT_HTML_R  = "/"
	INDEX_HTML_R = "/index.html"
)
View Source
const ADD_FAVORITE_BOARD_R = "/user/:user_id/favorites/addboard"
View Source
const ADD_FAVORITE_FOLDER_R = "/user/:user_id/favorites/addfolder"
View Source
const ADD_FAVORITE_LINE_R = "/user/:user_id/favorites/addline"
View Source
const ARTICLES_HTML_R = "/board/:bid/articles"
View Source
const ARTICLE_HTML_R = "/board/:bid/article/:aid"
View Source
const ATTEMPT_CHANGE_EMAIL_R = "/user/:user_id/attemptchangeemail"
View Source
const ATTEMPT_REGISTER_USER_R = "/account/attemptregister"
View Source
const ATTEMPT_SET_ID_EMAIL_R = "/user/:user_id/attemptsetidemail"
View Source
const BOARDS_FAVORITES_HTML_R = "/user/:user_id/favorites"
View Source
const BOARDS_HTML_R = "/boards"
View Source
const BOARDS_POPULAR_HTML_R = "/boards/popular"
View Source
const CHANGE_EMAIL_R = "/user/:user_id/changeemail"
View Source
const CHANGE_PASSWD_R = "/user/:user_id/updatepasswd" //nolint // passwd as route
View Source
const CHECK_EXISTS_USER_R = "/account/existsuser"
View Source
const CLS_BOARDS_HTML_R = "/cls/:cls_id"
View Source
const CREATE_ARTICLE_HTML_R = "/board/:bid/post"
View Source
const CREATE_ARTICLE_R = "/board/:bid/article"
View Source
const CREATE_BOARD_R = "/class/:cls/board"
View Source
const CREATE_COMMENT_R = "/board/:bid/article/:aid/comment"
View Source
const CREATE_RANK_R = "/board/:bid/article/:aid/rank"
View Source
const CROSS_POST_R = "/board/:bid/article/:aid/crosspost"
View Source
const (
	DEFAULT_FAV_TITLE = "新的目錄"
)
View Source
const DELETE_ARTICLES_R = "/board/:bid/deletearticles"
View Source
const DELETE_COMMENTS_R = "/board/:bid/article/:aid/deletecomments"
View Source
const DELETE_FAVORITE_R = "/user/:user_id/favorites/delete"
View Source
const EDIT_ARTICLE_R = "/board/:bid/article/:aid/edit"
View Source
const GET_ARTICLE_BLOCKS_R = "/board/:bid/articleblocks/:aid"
View Source
const GET_ARTICLE_R = "/board/:bid/article/:aid"
View Source
const GET_BOARD_DETAIL_R = "/board/:bid"
View Source
const GET_BOARD_SUMMARY_R = "/board/:bid/summary"
View Source
const GET_MAN_ARTICLE_BLOCKS_R = "/board/:bid/manualblocks/*aid"
View Source
const GET_MAN_ARTICLE_R = "/board/:bid/manual/*aid"
View Source
const GET_USER_ID_R = "/userid"
View Source
const GET_USER_INFO_R = "/user/:user_id"
View Source
const GET_USER_VISIT_COUNT_R = "/uservisitcount"
View Source
const GET_VERSION_R = "/version"
View Source
const INDEX_R = "/"
View Source
const LOAD_ARTICLE_COMMENTS_R = "/board/:bid/article/:aid/comments"
View Source
const LOAD_AUTO_COMPLETE_BOARDS_R = "/boards/autocomplete"
View Source
const LOAD_BOTTOM_ARTICLES_R = "/board/:bid/articles/bottom"
View Source
const LOAD_CLASS_BOARDS_R = "/cls/:clsid"
View Source
const LOAD_FAVORITE_BOARDS_R = "/user/:user_id/favorites"
View Source
const LOAD_GENERAL_ARTICLES_R = "/board/:bid/articles"
View Source
const LOAD_GENERAL_BOARDS_BY_CLASS_R = "/boards/byclass"
View Source
const LOAD_GENERAL_BOARDS_R = "/boards"
View Source
const LOAD_MAN_ARTICLES_R = "/board/:bid/manuals"
View Source
const LOAD_POPULAR_ARTICLES_R = "/articles/popular"
View Source
const LOAD_POPULAR_BOARDS_R = "/boards/popular"
View Source
const LOAD_USER_ARTICLES_R = "/user/:user_id/articles"
View Source
const LOAD_USER_COMMENTS_R = "/user/:user_id/comments"
View Source
const LOGIN_HTML_R = "/login"
View Source
const LOGIN_R = "/account/login"
View Source
const LOGOUT_R = "/account/logout"
View Source
const (
	MAX_USER_FAVORITES_BUF_SIZE = 65535
)
View Source
const REFRESH_R = "/account/refresh"
View Source
const REGISTER_CLIENT_R = "/client/register"
View Source
const REGISTER_HTML_R = "/register"
View Source
const REGISTER_USER_R = "/account/register"
View Source
const REPLY_COMMENTS_R = "/board/:bid/article/:aid/replycomments"
View Source
const SET_ID_EMAIL_R = "/user/:user_id/setidemail"
View Source
const USER_ATTEMPT_CHANGE_EMAIL_HTML_R = "/user/:user_id/attemptchangeemail"
View Source
const USER_ATTEMPT_SET_ID_EMAIL_HTML_R = "/user/:user_id/attemptsetidemail"
View Source
const USER_CHANGE_EMAIL_HTML_R = "/user/:user_id/changeemail"
View Source
const USER_CHANGE_PASSWD_HTML_R = "/user/:user_id/resetpassword" //nolint // passwd as route
View Source
const USER_HTML_R = "/user/:user_id"
View Source
const USER_SET_ID_EMAIL_HTML_R = "/user/:user_id/setidemail"

Variables

View Source
var (
	GET_ARTICLE_CONTENT_INFO_TOO_SOON_NANO_TS = ARTICLE_LOCK_NANO_TS + types.NanoTS(1)*types.TS_TO_NANO_TS // 10 + 1 seconds.

	MIME_TYPE_MAP = map[string]string{
		".js":   "text/javascript",
		".html": "text/html",
		".map":  "application/json",
	}
)
View Source
var (
	ErrInvalidRemoteAddr = errors.New("invalid remote addr")

	ErrInvalidParams            = errors.New("invalid params")
	ErrLoginFailed              = errors.New("login failed")
	ErrNotImplemented           = errors.New("not implemented")
	ErrInvalidPath              = errors.New("invalid path")
	ErrInvalidToken             = errors.New("invalid token")
	ErrInvalidOrigin            = errors.New("invalid origin")
	ErrInvalidBackendStatusCode = errors.New("invalid backend status code")
	ErrNoBoard                  = errors.New("no board")
	ErrNoArticle                = errors.New("no article")
	ErrAlreadyDeleted           = errors.New("already deleted")
	ErrFileNotFound             = errors.New("file not found")

	ErrInvalidUser   = errors.New("invalid user")
	ErrInvalidClient = errors.New("invalid client")

	ErrAlreadyExists = errors.New("already exists")

	ErrInvalidFav = errors.New("invalid fav")
)
View Source
var (
	IsTest = false
)

Functions

func AddFavoriteBoard added in v0.30.1

func AddFavoriteBoard(remoteAddr string, userID bbs.UUserID, params interface{}, path interface{}, c *gin.Context) (result interface{}, statusCode int, err error)

func AddFavoriteBoardWrapper added in v0.30.1

func AddFavoriteBoardWrapper(c *gin.Context)

func AddFavoriteFolder added in v0.31.0

func AddFavoriteFolder(remoteAddr string, userID bbs.UUserID, params interface{}, path interface{}, c *gin.Context) (result interface{}, statusCode int, err error)

func AddFavoriteFolderWrapper added in v0.31.0

func AddFavoriteFolderWrapper(c *gin.Context)

func AddFavoriteLine added in v0.31.0

func AddFavoriteLine(remoteAddr string, userID bbs.UUserID, params interface{}, path interface{}, c *gin.Context) (result interface{}, statusCode int, err error)

func AddFavoriteLineWrapper added in v0.31.0

func AddFavoriteLineWrapper(c *gin.Context)

func AllHTMLWrapper added in v0.18.0

func AllHTMLWrapper(c *gin.Context)

func ArticleLockKey added in v0.19.4

func ArticleLockKey(boardID bbs.BBoardID, articleID bbs.ArticleID) (key string)

func AttemptChangeEmail added in v0.8.0

func AttemptChangeEmail(remoteAddr string, userID bbs.UUserID, params interface{}, path interface{}, c *gin.Context) (result interface{}, statusCode int, err error)

func AttemptChangeEmailWrapper added in v0.8.0

func AttemptChangeEmailWrapper(c *gin.Context)

func AttemptRegisterUser added in v0.9.3

func AttemptRegisterUser(remoteAddr string, params interface{}, c *gin.Context) (result interface{}, statusCode int, err error)

func AttemptRegisterUserWrapper added in v0.9.3

func AttemptRegisterUserWrapper(c *gin.Context)

func AttemptSetIDEmail added in v0.8.0

func AttemptSetIDEmail(remoteAddr string, userID bbs.UUserID, params interface{}, path interface{}, c *gin.Context) (result interface{}, statusCode int, err error)

func AttemptSetIDEmailWrapper added in v0.8.0

func AttemptSetIDEmailWrapper(c *gin.Context)

func ChangeEmail added in v0.8.0

func ChangeEmail(remoteAddr string, userID bbs.UUserID, params interface{}, path interface{}, c *gin.Context) (result interface{}, statusCode int, err error)

func ChangeEmailWrapper added in v0.8.0

func ChangeEmailWrapper(c *gin.Context)

func ChangePasswd added in v0.7.0

func ChangePasswd(remoteAddr string, userID bbs.UUserID, params interface{}, path interface{}, c *gin.Context) (result interface{}, statusCode int, err error)

func ChangePasswdWrapper added in v0.7.0

func ChangePasswdWrapper(c *gin.Context)

func CheckExistsUser added in v0.13.6

func CheckExistsUser(remoteAddr string, params interface{}, c *gin.Context) (result interface{}, statusCode int, err error)

func CheckExistsUserWrapper added in v0.13.6

func CheckExistsUserWrapper(c *gin.Context)

func CreateArticle added in v0.13.0

func CreateArticle(remoteAddr string, userID bbs.UUserID, params interface{}, path interface{}, c *gin.Context) (result interface{}, statusCode int, err error)

func CreateArticleWrapper added in v0.13.0

func CreateArticleWrapper(c *gin.Context)

func CreateBoard added in v0.12.0

func CreateBoard(remoteAddr string, userID bbs.UUserID, params interface{}, path interface{}, c *gin.Context) (result interface{}, statusCode int, err error)

func CreateBoardWrapper added in v0.12.0

func CreateBoardWrapper(c *gin.Context)

func CreateComment added in v0.16.0

func CreateComment(remoteAddr string, userID bbs.UUserID, params interface{}, path interface{}, c *gin.Context) (result interface{}, statusCode int, err error)

func CreateCommentWrapper added in v0.16.0

func CreateCommentWrapper(c *gin.Context)

func CreateRank added in v0.14.0

func CreateRank(remoteAddr string, userID bbs.UUserID, params interface{}, path interface{}, c *gin.Context) (result interface{}, statusCode int, err error)

func CreateRankWrapper added in v0.14.0

func CreateRankWrapper(c *gin.Context)

func CrossPost added in v0.20.0

func CrossPost(remoteAddr string, userID bbs.UUserID, params interface{}, path interface{}, c *gin.Context) (result interface{}, statusCode int, err error)

func CrossPostWrapper added in v0.20.0

func CrossPostWrapper(c *gin.Context)

func DeleteArticles added in v0.23.0

func DeleteArticles(remoteAddr string, userID bbs.UUserID, params interface{}, path interface{}, c *gin.Context) (result interface{}, statusCode int, err error)

DeleteArticles provides function from api /board/:bid/deletearticles it will call backend api (go-pttbbs) and deleting all components like: comments, ranks, user_read_records about this articles

func DeleteArticlesWrapper added in v0.23.0

func DeleteArticlesWrapper(c *gin.Context)

func DeleteComments added in v0.22.0

func DeleteComments(remoteAddr string, userID bbs.UUserID, params interface{}, path interface{}, c *gin.Context) (result interface{}, statusCode int, err error)

func DeleteCommentsWrapper added in v0.22.0

func DeleteCommentsWrapper(c *gin.Context)

func DeleteFavorite added in v0.31.1

func DeleteFavorite(remoteAddr string, userID bbs.UUserID, params interface{}, path interface{}, c *gin.Context) (result interface{}, statusCode int, err error)

func DeleteFavoriteWrapper added in v0.31.1

func DeleteFavoriteWrapper(c *gin.Context)

func DeserializeArticlesAndUpdateDB added in v0.19.4

func DeserializeArticlesAndUpdateDB(articleSummaries_b []*bbs.ArticleSummary, updateNanoTS types.NanoTS) (articleSummaries []*schema.ArticleSummaryWithRegex, err error)

func DeserializeBoardDetailsAndUpdateDB added in v0.29.0

func DeserializeBoardDetailsAndUpdateDB(boardDetails_b []*bbs.BoardDetail, updateNanoTS types.NanoTS) (boardDetails []*schema.BoardDetail, err error)

DeserializeBoards

each_b.Reason happens only with invalid permission.

func DeserializeBoardsAndUpdateDB added in v0.19.4

func DeserializeBoardsAndUpdateDB(boardSummaries_b []*bbs.BoardSummary, updateNanoTS types.NanoTS) (boardSummaries []*schema.BoardSummary, err error)

DeserializeBoards

each_b.Reason happens only with invalid permission.

func DeserializePBArticlesAndUpdateDB added in v0.26.0

func DeserializePBArticlesAndUpdateDB(boardID bbs.BBoardID, articleSummaries_b []*boardd.Post, updateNanoTS types.NanoTS, isBottom bool) (articleSummaries []*schema.ArticleSummaryWithRegex, err error)

func DeserializePBBoardsAndUpdateDB added in v0.25.0

func DeserializePBBoardsAndUpdateDB(boardSummaries_b []*boardd.Board, updateNanoTS types.NanoTS) (boardSummaries []*schema.BoardSummary, err error)

DeserializePBBoardsAndUpdateDB

func DeserializePBManArticlesAndUpdateDB added in v0.28.0

func DeserializePBManArticlesAndUpdateDB(boardID bbs.BBoardID, levelIdx types.ManArticleID, entries []*mand.Entry, updateNanoTS types.NanoTS) (articleSummaries []*schema.ManArticleSummary, err error)

func EditArticleDetail added in v0.22.0

func EditArticleDetail(remoteAddr string, userID bbs.UUserID, params interface{}, path interface{}, c *gin.Context) (result interface{}, statusCode int, err error)

func EditArticleDetailWrapper added in v0.22.0

func EditArticleDetailWrapper(c *gin.Context)

func Form added in v0.6.0

func Form(theFunc APIFunc, params interface{}, c *gin.Context)

func FormJSON added in v0.6.0

func FormJSON(theFunc APIFunc, params interface{}, c *gin.Context)

func FormLogout added in v0.24.1

func FormLogout(theFunc APIFunc, params interface{}, c *gin.Context)

func GetArticleBlocks added in v0.24.0

func GetArticleBlocks(remoteAddr string, userID bbs.UUserID, params interface{}, path interface{}, c *gin.Context) (result interface{}, statusCode int, err error)

func GetArticleBlocksWrapper added in v0.24.0

func GetArticleBlocksWrapper(c *gin.Context)

func GetArticleDetail added in v0.3.0

func GetArticleDetail(remoteAddr string, userID bbs.UUserID, params interface{}, path interface{}, c *gin.Context) (result interface{}, statusCode int, err error)

func GetArticleDetailWrapper added in v0.4.0

func GetArticleDetailWrapper(c *gin.Context)

func GetBoardDetail added in v0.2.1

func GetBoardDetail(remoteAddr string, userID bbs.UUserID, params interface{}, path interface{}, c *gin.Context) (result interface{}, statusCode int, err error)

func GetBoardDetailWrapper added in v0.4.0

func GetBoardDetailWrapper(c *gin.Context)

func GetBoardSummary added in v0.3.0

func GetBoardSummary(remoteAddr string, userID bbs.UUserID, params interface{}, path interface{}, c *gin.Context) (result interface{}, statusCode int, err error)

func GetBoardSummaryWrapper added in v0.4.0

func GetBoardSummaryWrapper(c *gin.Context)

func GetManArticleBlocks added in v0.28.0

func GetManArticleBlocks(remoteAddr string, userID bbs.UUserID, params interface{}, path interface{}, c *gin.Context) (result interface{}, statusCode int, err error)

func GetManArticleBlocksWrapper added in v0.28.0

func GetManArticleBlocksWrapper(c *gin.Context)

func GetManArticleDetail added in v0.28.0

func GetManArticleDetail(remoteAddr string, userID bbs.UUserID, params interface{}, path interface{}, c *gin.Context) (result interface{}, statusCode int, err error)

func GetManArticleDetailWrapper added in v0.28.0

func GetManArticleDetailWrapper(c *gin.Context)

func GetUserID added in v0.13.1

func GetUserID(remoteAddr string, userID bbs.UUserID, params interface{}, c *gin.Context) (result interface{}, statusCode int, err error)

func GetUserIDWrapper added in v0.13.1

func GetUserIDWrapper(c *gin.Context)

func GetUserInfo added in v0.3.0

func GetUserInfo(remoteAddr string, userID bbs.UUserID, params interface{}, path interface{}, c *gin.Context) (result interface{}, statusCode int, err error)

func GetUserInfoWrapper added in v0.4.0

func GetUserInfoWrapper(c *gin.Context)

func GetUserVisitCount added in v0.24.0

func GetUserVisitCount(remoteAddr string, params interface{}, c *gin.Context) (result interface{}, statusCode int, err error)

func GetUserVisitCountWrapper added in v0.24.0

func GetUserVisitCountWrapper(c *gin.Context)

func GetVersion added in v0.13.6

func GetVersion(remoteAddr string, params interface{}, c *gin.Context) (result interface{}, statusCode int, err error)

func GetVersionWrapper added in v0.13.6

func GetVersionWrapper(c *gin.Context)

func Index

func Index(remoteAddr string, params interface{}, c *gin.Context) (result interface{}, statusCode int, err error)

func IndexHTMLWrapper added in v0.18.0

func IndexHTMLWrapper(c *gin.Context)

func IndexWrapper added in v0.4.0

func IndexWrapper(c *gin.Context)

func JSON added in v0.4.0

func JSON(theFunc APIFunc, params interface{}, c *gin.Context)

func LoadArticleComments added in v0.3.0

func LoadArticleComments(remoteAddr string, userID bbs.UUserID, params interface{}, path interface{}, c *gin.Context) (result interface{}, statusCode int, err error)

func LoadArticleCommentsWrapper added in v0.4.0

func LoadArticleCommentsWrapper(c *gin.Context)

func LoadAutoCompleteBoards added in v0.11.0

func LoadAutoCompleteBoards(remoteAddr string, userID bbs.UUserID, params interface{}, c *gin.Context) (result interface{}, statusCode int, err error)

func LoadAutoCompleteBoardsWrapper added in v0.11.0

func LoadAutoCompleteBoardsWrapper(c *gin.Context)

func LoadBottomArticles added in v0.3.0

func LoadBottomArticles(remoteAddr string, userID bbs.UUserID, params interface{}, path interface{}, c *gin.Context) (result interface{}, statusCode int, err error)

func LoadBottomArticlesWrapper added in v0.4.0

func LoadBottomArticlesWrapper(c *gin.Context)

func LoadClassBoards added in v0.21.0

func LoadClassBoards(remoteAddr string, userID bbs.UUserID, params interface{}, path interface{}, c *gin.Context) (result interface{}, statusCode int, err error)

func LoadClassBoardsWrapper added in v0.21.0

func LoadClassBoardsWrapper(c *gin.Context)

func LoadFavoriteBoards added in v0.3.0

func LoadFavoriteBoards(remoteAddr string, userID bbs.UUserID, params interface{}, path interface{}, c *gin.Context) (result interface{}, statusCode int, err error)

func LoadFavoriteBoardsWrapper added in v0.4.0

func LoadFavoriteBoardsWrapper(c *gin.Context)

func LoadGeneralArticles added in v0.3.0

func LoadGeneralArticles(remoteAddr string, userID bbs.UUserID, params interface{}, path interface{}, c *gin.Context) (result interface{}, statusCode int, err error)

func LoadGeneralArticlesByKeyword added in v0.19.4

func LoadGeneralArticlesByKeyword(remoteAddr string, userID bbs.UUserID, params interface{}, path interface{}, c *gin.Context) (result interface{}, statusCode int, err error)

func LoadGeneralArticlesWrapper added in v0.4.0

func LoadGeneralArticlesWrapper(c *gin.Context)

func LoadGeneralBoards added in v0.2.1

func LoadGeneralBoards(remoteAddr string, userID bbs.UUserID, params interface{}, c *gin.Context) (result interface{}, statusCode int, err error)

func LoadGeneralBoardsByClass added in v0.9.0

func LoadGeneralBoardsByClass(remoteAddr string, userID bbs.UUserID, params interface{}, c *gin.Context) (result interface{}, statusCode int, err error)

func LoadGeneralBoardsByClassWrapper added in v0.9.0

func LoadGeneralBoardsByClassWrapper(c *gin.Context)

func LoadGeneralBoardsWrapper added in v0.4.0

func LoadGeneralBoardsWrapper(c *gin.Context)

func LoadManArticles added in v0.28.0

func LoadManArticles(remoteAddr string, userID bbs.UUserID, params interface{}, path interface{}, c *gin.Context) (result interface{}, statusCode int, err error)

func LoadManArticlesWrapper added in v0.28.0

func LoadManArticlesWrapper(c *gin.Context)

func LoadPopularArticles added in v0.3.0

func LoadPopularArticles(remoteAddr string, userID bbs.UUserID, params interface{}, c *gin.Context) (result interface{}, statusCode int, err error)

func LoadPopularArticlesWrapper added in v0.4.0

func LoadPopularArticlesWrapper(c *gin.Context)

func LoadPopularBoards added in v0.3.0

func LoadPopularBoards(remoteAddr string, userID bbs.UUserID, params interface{}, c *gin.Context) (result interface{}, statusCode int, err error)

func LoadPopularBoardsWrapper added in v0.4.0

func LoadPopularBoardsWrapper(c *gin.Context)

func LoadUserArticles added in v0.3.0

func LoadUserArticles(remoteAddr string, userID bbs.UUserID, params interface{}, path interface{}, c *gin.Context) (result interface{}, statusCode int, err error)

func LoadUserArticlesWrapper added in v0.4.0

func LoadUserArticlesWrapper(c *gin.Context)

func LoadUserComments added in v0.3.0

func LoadUserComments(remoteAddr string, userID bbs.UUserID, params interface{}, path interface{}, c *gin.Context) (result interface{}, statusCode int, err error)

func LoadUserCommentsWrapper added in v0.4.0

func LoadUserCommentsWrapper(c *gin.Context)

func Login added in v0.1.0

func Login(remoteAddr string, params interface{}, c *gin.Context) (result interface{}, statusCode int, err error)

func LoginHTMLWrapper added in v0.18.0

func LoginHTMLWrapper(c *gin.Context)

func LoginRequiredJSON added in v0.4.0

func LoginRequiredJSON(theFunc LoginRequiredAPIFunc, params interface{}, c *gin.Context)

func LoginRequiredPathJSON added in v0.4.0

func LoginRequiredPathJSON(theFunc LoginRequiredPathAPIFunc, params interface{}, path interface{}, c *gin.Context)

func LoginRequiredPathQuery added in v0.4.0

func LoginRequiredPathQuery(theFunc LoginRequiredPathAPIFunc, params interface{}, path interface{}, c *gin.Context)

func LoginRequiredQuery added in v0.4.0

func LoginRequiredQuery(theFunc LoginRequiredAPIFunc, params interface{}, c *gin.Context)

func LoginWrapper added in v0.4.0

func LoginWrapper(c *gin.Context)

func Logout added in v0.24.1

func Logout(remoteAddr string, params interface{}, c *gin.Context) (result interface{}, statusCode int, err error)

func LogoutWrapper added in v0.24.1

func LogoutWrapper(c *gin.Context)

func ManArticleLockKey added in v0.28.0

func ManArticleLockKey(boardID bbs.BBoardID, articleID types.ManArticleID) (key string)

func OptionsWrapper added in v0.5.0

func OptionsWrapper(c *gin.Context)

func Query added in v0.4.0

func Query(theFunc APIFunc, params interface{}, c *gin.Context)

func RedirectPathQuery added in v0.8.0

func RedirectPathQuery(theFunc RedirectPathAPIFunc, params interface{}, path interface{}, c *gin.Context)

func Refresh added in v0.32.0

func Refresh(remoteAddr string, params interface{}, c *gin.Context) (result interface{}, statusCode int, err error)

func RefreshWrapper added in v0.32.0

func RefreshWrapper(c *gin.Context)

func RegisterClient added in v0.1.0

func RegisterClient(remoteAddr string, userID bbs.UUserID, params interface{}, c *gin.Context) (result interface{}, statusCode int, err error)

func RegisterClientWrapper added in v0.4.0

func RegisterClientWrapper(c *gin.Context)

func RegisterHTMLWrapper added in v0.18.0

func RegisterHTMLWrapper(c *gin.Context)

func RegisterUser added in v0.1.0

func RegisterUser(remoteAddr string, params interface{}, c *gin.Context) (result interface{}, statusCode int, err error)

func RegisterUserWrapper added in v0.4.0

func RegisterUserWrapper(c *gin.Context)

func ReplyComments added in v0.22.0

func ReplyComments(remoteAddr string, userID bbs.UUserID, params interface{}, path interface{}, c *gin.Context) (result interface{}, statusCode int, err error)

func ReplyCommentsWrapper added in v0.22.0

func ReplyCommentsWrapper(c *gin.Context)

func SetIDEmail added in v0.8.0

func SetIDEmail(remoteAddr string, userID bbs.UUserID, params interface{}, path interface{}, c *gin.Context) (result interface{}, statusCode int, err error)

func SetIDEmailWrapper added in v0.8.0

func SetIDEmailWrapper(c *gin.Context)

func SetIsTest added in v0.5.0

func SetIsTest()

func TryGetArticleContentInfo added in v0.22.0

func TryGetArticleContentInfo(userID bbs.UUserID, bboardID bbs.BBoardID, articleID bbs.ArticleID, c *gin.Context, isSystem bool, isHash bool, isContent bool) (content [][]*types.Rune, contentPrefix [][]*types.Rune, contentMD5 string, ip string, host string, bbs string, signatureMD5 string, signatureDBCS []byte, articleDetailSummary *schema.ArticleDetailSummary, fileSize int, hash cmsys.Fnv64_t, statusCode int, err error)

TryGetArticleContentInfo

嘗試拿到 article-content

  1. 根據 article-id 得到相對應的 filename, ownerid, create-time.
  2. 嘗試從 schema 拿到 db summary 資訊. (create-time)
  3. 如果可以從 schema 拿到 db 資訊: 3.1. 如果已經 deleted: return deleted. 3.2. 如果距離上次跟 pttbbs 拿的時間太近: 從 schema 拿到 content, return schema-content.
  4. 嘗試做 lock. 4.1. 如果 lock 失敗: 從 schema 拿到 content, return schema-content.
  5. 從 pttbbs 拿到 article
  6. 如果從 pttbbs 拿到的時間比 schema 裡拿到的時間舊的話: return schema-content.
  7. parse article 為 content / comments.
  8. 將 comments parse 為 firstComments / theRestComments.
  9. 將 theRestComments 丟進 queue 裡.

func TryGetManArticleContentInfo added in v0.28.0

func TryGetManArticleContentInfo(userID bbs.UUserID, bboardID bbs.BBoardID, articleID types.ManArticleID, c *gin.Context, isSystem bool, isContent bool) (content [][]*types.Rune, contentMD5 string, articleDetailSummary *schema.ManArticleDetailSummary, err error)

func UnsetIsTest added in v0.5.0

func UnsetIsTest()

func UpdateArticleContentInfo added in v0.19.4

func UpdateArticleContentInfo(
	boardID bbs.BBoardID,
	articleID bbs.ArticleID,
	content [][]*types.Rune,
	contentPrefix [][]*types.Rune,
	contentMD5 string,
	ip string,
	host string,
	bbs string,
	signatureMD5 string,
	signatureDBCS []byte,
	updateNanoTS types.NanoTS,
) (err error)

func UpdateManArticleContentInfo added in v0.28.0

func UpdateManArticleContentInfo(
	boardID bbs.BBoardID,
	articleID types.ManArticleID,
	content [][]*types.Rune,
	contentMD5 string,
	updateNanoTS types.NanoTS) (err error)

func UserAttemptChangeEmailHTMLWrapper added in v0.18.0

func UserAttemptChangeEmailHTMLWrapper(c *gin.Context)

func UserAttemptSetIDEmailHTMLWrapper added in v0.18.0

func UserAttemptSetIDEmailHTMLWrapper(c *gin.Context)

func UserChangeEmailHTMLWrapper added in v0.18.0

func UserChangeEmailHTMLWrapper(c *gin.Context)

func UserChangePasswdHTMLWrapper added in v0.18.0

func UserChangePasswdHTMLWrapper(c *gin.Context)

func UserHTMLWrapper added in v0.18.0

func UserHTMLWrapper(c *gin.Context)

func UserSetIDEmailHTMLWrapper added in v0.18.0

func UserSetIDEmailHTMLWrapper(c *gin.Context)

Types

type APIFunc added in v0.18.0

type APIFunc func(remoteAddr string, params interface{}, c *gin.Context) (result interface{}, statusCode int, err error)

type AddFavoriteBoardParams added in v0.30.1

type AddFavoriteBoardParams struct {
	LevelIdx schema.LevelIdx   `json:"level_idx,omitempty" form:"level_idx,omitempty" url:"level_idx,omitempty"`
	FBoardID apitypes.FBoardID `json:"bid" form:"bid" url:"bid"`
}

type AddFavoriteBoardPath added in v0.30.1

type AddFavoriteBoardPath struct {
	UserID bbs.UUserID `uri:"user_id"`
}

type AddFavoriteFolderParams added in v0.31.0

type AddFavoriteFolderParams struct {
	LevelIdx schema.LevelIdx `json:"level_idx,omitempty" form:"level_idx,omitempty" url:"level_idx,omitempty"`
	Title    string          `json:"title,omitempty" form:"title,omitempty" url:"title,omitempty"`
}

type AddFavoriteFolderPath added in v0.31.0

type AddFavoriteFolderPath struct {
	UserID bbs.UUserID `uri:"user_id"`
}

type AddFavoriteLineParams added in v0.31.0

type AddFavoriteLineParams struct {
	LevelIdx schema.LevelIdx `json:"level_idx,omitempty" form:"level_idx,omitempty" url:"level_idx,omitempty"`
}

type AddFavoriteLinePath added in v0.31.0

type AddFavoriteLinePath struct {
	UserID bbs.UUserID `uri:"user_id"`
}

type AddFavoriteResult added in v0.31.0

type AddFavoriteResult *apitypes.BoardSummary

type AttemptChangeEmailParams added in v0.8.0

type AttemptChangeEmailParams struct {
	ClientID     string `json:"client_id" form:"client_id"`
	ClientSecret string `json:"client_secret" form:"client_secret"`

	Password string `json:"password" form:"password"`
	Email    string `json:"email" form:"email"`
}

type AttemptChangeEmailPath added in v0.8.0

type AttemptChangeEmailPath struct {
	UserID bbs.UUserID `uri:"user_id"`
}

type AttemptChangeEmailResult added in v0.8.0

type AttemptChangeEmailResult struct {
	UserID    bbs.UUserID `json:"user_id"`
	Email     string      `json:"email"`
	TokenUser bbs.UUserID `json:"tokenuser"`
}

type AttemptRegisterUserParams added in v0.9.3

type AttemptRegisterUserParams struct {
	ClientID     string `json:"client_id" form:"client_id"`
	ClientSecret string `json:"client_secret" form:"client_secret"`

	Username string `json:"username" form:"username"`
	Email    string `json:"email" form:"email"`
}

type AttemptRegisterUserResult added in v0.9.3

type AttemptRegisterUserResult struct {
	Username string `json:"user_id"`
}

type AttemptSetIDEmailParams added in v0.8.0

type AttemptSetIDEmailParams struct {
	ClientID     string `json:"client_id" form:"client_id"`
	ClientSecret string `json:"client_secret" form:"client_secret"`

	Password string `json:"password" form:"password"`
	Email    string `json:"email"`
}

type AttemptSetIDEmailPath added in v0.8.0

type AttemptSetIDEmailPath struct {
	UserID bbs.UUserID `uri:"user_id"`
}

type AttemptSetIDEmailResult added in v0.8.0

type AttemptSetIDEmailResult struct {
	UserID bbs.UUserID `json:"user_id"`
	Email  string      `json:"email"`

	TokenUser bbs.UUserID `json:"tokenuser"`
}

type ChangeEmailParams added in v0.8.0

type ChangeEmailParams struct {
	ClientID     string `json:"client_id" form:"client_id"`
	ClientSecret string `json:"client_secret" form:"client_secret"`
	Jwt          string `json:"token" form:"token" url:"token"`
}

type ChangeEmailPath added in v0.8.0

type ChangeEmailPath struct {
	UserID bbs.UUserID `uri:"user_id"`
}

type ChangeEmailResult added in v0.8.0

type ChangeEmailResult struct {
	Email string `json:"email"`

	TokenUser bbs.UUserID `json:"tokenuser"`
}

type ChangePasswdParams added in v0.7.0

type ChangePasswdParams struct {
	ClientID     string `json:"client_id" form:"client_id"`
	ClientSecret string `json:"client_secret" form:"client_secret"`

	OrigPassword    string `json:"orig_password" form:"orig_password"`
	Password        string `json:"password" form:"password"`
	PasswordConfirm string `json:"password_confirm" form:"password_confirm"`
}

type ChangePasswdPath added in v0.7.0

type ChangePasswdPath struct {
	UserID bbs.UUserID `uri:"user_id"`
}

type ChangePasswdResult added in v0.7.0

type ChangePasswdResult LoginResult

func NewChangePasswdResult added in v0.7.0

func NewChangePasswdResult(result_b *pttbbsapi.ChangePasswdResult) *ChangePasswdResult

type CheckExistsUserParams added in v0.13.6

type CheckExistsUserParams struct {
	ClientID     string `json:"client_id" form:"client_id"`
	ClientSecret string `json:"client_secret" form:"client_secret"`

	Username string `json:"username" form:"username"`
}

type CheckExistsUserResult added in v0.13.6

type CheckExistsUserResult struct {
	IsExists bool `json:"is_exists"`
}

type ClientInfo added in v0.5.0

type ClientInfo struct {
	ClientID   string           `json:"c"`
	ClientType types.ClientType `json:"t"`
}

type CreateArticleParams added in v0.13.0

type CreateArticleParams struct {
	PostType string          `json:"class" form:"class" url:"class"`
	Title    string          `json:"title" form:"title" url:"title"`
	Content  [][]*types.Rune `json:"content" form:"content" url:"content"`
}

type CreateArticlePath added in v0.13.0

type CreateArticlePath struct {
	FBoardID apitypes.FBoardID `uri:"bid" binding:"required"`
}

type CreateArticleResult added in v0.13.0

type CreateArticleResult *apitypes.ArticleSummary

type CreateBoardParams added in v0.12.0

type CreateBoardParams struct {
	Brdname      string            `json:"brdname" form:"brdname" url:"brdname"`
	BrdClass     string            `json:"class" form:"class" url:"class"`
	BrdTitle     string            `json:"title" form:"title" url:"title"`
	BMs          []bbs.UUserID     `json:"bms,omitempty" form:"bms,omitempty" url:"bms,omitempty"`
	BrdAttr      ptttype.BrdAttr   `json:"brdattr,omitempty" form:"brdattr,omitempty" url:"brdattr,omitempty"`
	Level        ptttype.PERM      `json:"level,omitempty" form:"level,omitempty" url:"level,omitempty"`
	ChessCountry ptttype.ChessCode `json:"chess_country,omitempty" form:"chess_country,omitempty" url:"chess_country,omitempty"`
	IsGroup      bool              `json:"is_group,omitempty" form:"is_group,omitempty" url:"is_group,omitempty"`
}

type CreateBoardPath added in v0.12.0

type CreateBoardPath struct {
	ClsBid ptttype.Bid `uri:"cls" binding:"required"`
}

type CreateBoardResult added in v0.12.0

type CreateBoardResult *apitypes.BoardSummary

type CreateCommentParams added in v0.16.0

type CreateCommentParams struct {
	CommentType ptttype.CommentType `json:"type" form:"type" url:"type"`
	Content     string              `json:"content" form:"content" url:"content"`
}

type CreateCommentPath added in v0.16.0

type CreateCommentPath struct {
	FBoardID   apitypes.FBoardID   `uri:"bid" binding:"required"`
	FArticleID apitypes.FArticleID `uri:"aid" binding:"required"`
}

type CreateCommentResult added in v0.16.0

type CreateCommentResult *apitypes.Comment

type CreateRankParams added in v0.14.0

type CreateRankParams struct {
	Rank int `json:"rank" form:"rank" url:"rank"`
}

type CreateRankPath added in v0.14.0

type CreateRankPath struct {
	FBoardID   apitypes.FBoardID   `uri:"bid" binding:"required"`
	FArticleID apitypes.FArticleID `uri:"aid" binding:"required"`
}

type CreateRankResult added in v0.14.0

type CreateRankResult struct {
	Rank int `json:"rank"`

	TokenUser bbs.UUserID `json:"tokenuser"`
}

type CrossPostParams added in v0.20.0

type CrossPostParams struct {
	XBoardID apitypes.FBoardID `json:"xbid" form:"xbid" url:"xbid"`
}

type CrossPostPath added in v0.20.0

type CrossPostPath struct {
	FBoardID   apitypes.FBoardID   `uri:"bid" binding:"required"`
	FArticleID apitypes.FArticleID `uri:"aid" binding:"required"`
}

type CrossPostResult added in v0.20.0

type CrossPostResult struct {
	Article *apitypes.ArticleSummary `json:"article"`
	Comment *apitypes.Comment        `json:"comment"`

	TokenUser bbs.UUserID `json:"tokenuser"`
}

type DeleteArticlesParams added in v0.23.0

type DeleteArticlesParams struct {
	ArticleIDs []apitypes.FArticleID `json:"aids" form:"aids" url:"aids" binding:"required"`
}

type DeleteArticlesPath added in v0.23.0

type DeleteArticlesPath struct {
	FBoardID apitypes.FBoardID `uri:"bid"`
}

type DeleteArticlesResult added in v0.23.0

type DeleteArticlesResult struct {
	Success   bool        `json:"success"`
	TokenUser bbs.UUserID `json:"tokenuser"`
}

type DeleteCommentsParams added in v0.22.0

type DeleteCommentsParams struct {
	TheList []*apitypes.DeleteCommentParams `json:"list" form:"list" url:"list"`
}

type DeleteCommentsPath added in v0.22.0

type DeleteCommentsPath struct {
	FBoardID   apitypes.FBoardID   `uri:"bid"`
	FArticleID apitypes.FArticleID `uri:"aid"`
}

type DeleteCommentsResult added in v0.22.0

type DeleteCommentsResult struct {
	Success   bool        `json:"success"`
	TokenUser bbs.UUserID `json:"tokenuser"`
}

type DeleteFavoriteParams added in v0.31.1

type DeleteFavoriteParams struct {
	LevelIdx schema.LevelIdx `json:"level_idx,omitempty" form:"level_idx,omitempty" url:"level_idx,omitempty"`
	Idx      string          `json:"idx,omitempty" form:"idx,omitempty" url:"idx,omitempty"`
}

type DeleteFavoritePath added in v0.31.1

type DeleteFavoritePath struct {
	UserID bbs.UUserID `uri:"user_id"`
}

type DeleteFavoriteResult added in v0.31.1

type DeleteFavoriteResult struct {
	Success   bool        `json:"success"`
	TokenUser bbs.UUserID `json:"tokenuser"`
}

type EditArticleParams added in v0.22.0

type EditArticleParams struct {
	PostType string          `json:"class" form:"class" url:"class"`
	Title    string          `json:"title" form:"title" url:"title"`
	Content  [][]*types.Rune `json:"content" form:"content" url:"content"`
}

type EditArticlePath added in v0.22.0

type EditArticlePath struct {
	FBoardID   apitypes.FBoardID   `uri:"bid"`
	FArticleID apitypes.FArticleID `uri:"aid"`
}

type EditArticleResult added in v0.22.0

type EditArticleResult struct {
	MTime         types.Time8     `json:"modified"` //
	Content       [][]*types.Rune `json:"content"`
	ContentPrefix [][]*types.Rune `json:"prefix"`
	Title         string          `json:"title"` //
	Class         string          `json:"class"` // can be: R: 轉, [class]
	TokenUser     bbs.UUserID     `json:"tokenuser"`
}

type GetArticleBlocksParams added in v0.24.0

type GetArticleBlocksParams struct {
	StartIdx string `json:"start_idx,omitempty" form:"start_idx,omitempty" url:"start_idx,omitempty"`
	Max      int    `json:"limit,omitempty" form:"limit,omitempty" url:"limit,omitempty"`
}

func NewGetArticleBlocksParams added in v0.24.0

func NewGetArticleBlocksParams() *GetArticleBlocksParams

type GetArticleBlocksPath added in v0.24.0

type GetArticleBlocksPath struct {
	FBoardID   apitypes.FBoardID   `uri:"bid"`
	FArticleID apitypes.FArticleID `uri:"aid"`
}

type GetArticleBlocksResult added in v0.24.0

type GetArticleBlocksResult struct {
	Content [][]*types.Rune `json:"content,omitempty"`

	IsDeleted  bool             `json:"deleted,omitempty"`     //
	CreateTime types.Time8      `json:"create_time,omitempty"` //
	MTime      types.Time8      `json:"modified,omitempty"`    //
	Recommend  int              `json:"recommend,omitempty"`   //
	NComments  int              `json:"n_comments,omitempty"`  //
	Owner      bbs.UUserID      `json:"owner,omitempty"`       //
	Nickname   string           `json:"nickname,omitempty"`
	Title      string           `json:"title,omitempty"` //
	Money      int              `json:"money,omitempty"` //
	Class      string           `json:"class,omitempty"` // can be: R: 轉, [class]
	Filemode   ptttype.FileMode `json:"mode,omitempty"`  //

	IP   string `json:"ip,omitempty"`
	Host string `json:"host,omitempty"` // ip 的中文呈現, 外國則為國家.
	BBS  string `json:"bbs,omitempty"`

	Rank int `json:"rank,omitempty"` // 評價

	NextIdx string `json:"next_idx"`

	TokenUser bbs.UUserID `json:"tokenuser"`
}

type GetArticleDetailParams added in v0.3.0

type GetArticleDetailParams struct{}

type GetArticleDetailPath added in v0.3.0

type GetArticleDetailPath struct {
	FBoardID   apitypes.FBoardID   `uri:"bid"`
	FArticleID apitypes.FArticleID `uri:"aid"`
}

type GetArticleDetailResult added in v0.3.0

type GetArticleDetailResult struct {
	BBoardID   apitypes.FBoardID   `json:"bid"`         //
	ArticleID  apitypes.FArticleID `json:"aid"`         //
	IsDeleted  bool                `json:"deleted"`     //
	CreateTime types.Time8         `json:"create_time"` //
	MTime      types.Time8         `json:"modified"`    //
	Recommend  int                 `json:"recommend"`   //
	NComments  int                 `json:"n_comments"`  //
	Owner      bbs.UUserID         `json:"owner"`       //
	Nickname   string              `json:"nickname"`
	Title      string              `json:"title"` //
	Money      int                 `json:"money"` //
	Class      string              `json:"class"` // can be: R: 轉, [class]
	Filemode   ptttype.FileMode    `json:"mode"`  //

	URL  string `json:"url"`  //
	Read bool   `json:"read"` //

	Brdname string `json:"brdname"`

	Content       [][]*types.Rune `json:"content"`
	ContentPrefix [][]*types.Rune `json:"prefix"`

	IP   string `json:"ip"`
	Host string `json:"host"` // ip 的中文呈現, 外國則為國家.
	BBS  string `json:"bbs"`

	Rank int `json:"rank"` // 評價

	TokenUser bbs.UUserID `json:"tokenuser"`
}

type GetBoardDetailParams added in v0.2.1

type GetBoardDetailParams struct {
	Fields string `json:"fields,omitempty" form:"fields,omitempty" uri:"fields,omitempty"`
}

type GetBoardDetailPath added in v0.2.1

type GetBoardDetailPath struct {
	FBoardID apitypes.FBoardID `uri:"bid"`
}

type GetBoardDetailResult added in v0.2.1

type GetBoardDetailResult *apitypes.BoardDetail

type GetBoardSummaryParams added in v0.3.0

type GetBoardSummaryParams struct{}

type GetBoardSummaryPath added in v0.3.0

type GetBoardSummaryPath struct {
	FBoardID apitypes.FBoardID `uri:"bid"`
}

type GetBoardSummaryResult added in v0.3.0

type GetBoardSummaryResult *apitypes.BoardSummary

type GetManArticleBlocksParams added in v0.28.0

type GetManArticleBlocksParams struct {
	StartIdx string `json:"start_idx,omitempty" form:"start_idx,omitempty" url:"start_idx,omitempty"`
	Max      int    `json:"limit,omitempty" form:"limit,omitempty" url:"limit,omitempty"`
}

func NewGetManArticleBlocksParams added in v0.28.0

func NewGetManArticleBlocksParams() *GetManArticleBlocksParams

type GetManArticleBlocksPath added in v0.28.0

type GetManArticleBlocksPath struct {
	FBoardID   apitypes.FBoardID   `uri:"bid"`
	FArticleID apitypes.FArticleID `uri:"aid"`
}

type GetManArticleBlocksResult added in v0.28.0

type GetManArticleBlocksResult struct {
	Content [][]*types.Rune `json:"content,omitempty"`

	IsDeleted  bool        `json:"deleted,omitempty"`     //
	CreateTime types.Time8 `json:"create_time,omitempty"` //
	MTime      types.Time8 `json:"modified,omitempty"`    //
	Title      string      `json:"title,omitempty"`       //

	NextIdx string `json:"next_idx"`

	TokenUser bbs.UUserID `json:"tokenuser"`
}

type GetManArticleDetailPath added in v0.28.0

type GetManArticleDetailPath struct {
	FBoardID   apitypes.FBoardID   `uri:"bid"`
	FArticleID apitypes.FArticleID `uri:"aid"`
}

type GetManArticleDetailResult added in v0.28.0

type GetManArticleDetailResult struct {
	BBoardID   apitypes.FBoardID   `json:"bid"` //
	ArticleID  apitypes.FArticleID `json:"aid"` //
	LevelIdx   apitypes.FArticleID `json:"level_idx"`
	IsDeleted  bool                `json:"deleted"`     //
	CreateTime types.Time8         `json:"create_time"` //
	MTime      types.Time8         `json:"modified"`    //
	Title      string              `json:"title"`       //
	IsDir      bool                `json:"is_dir"`

	Content [][]*types.Rune `json:"content"`

	TokenUser bbs.UUserID `json:"tokenuser"`
}

type GetUserIDResult added in v0.13.1

type GetUserIDResult struct {
	UserID bbs.UUserID `json:"user_id"`

	TokenUser bbs.UUserID `json:"tokenuser"`
}

type GetUserInfoParams added in v0.3.0

type GetUserInfoParams struct {
	Fields string `json:"fields,omitempty" form:"fields,omitempty" url:"fields,omitempty"`
}

type GetUserInfoPath added in v0.3.0

type GetUserInfoPath struct {
	UserID bbs.UUserID `uri:"user_id"`
}

type GetUserInfoResult added in v0.3.0

type GetUserInfoResult struct {
	UserID   bbs.UUserID `json:"user_id"`
	Username string      `json:"username"`
	Realname string      `json:"realtime"`
	Nickname string      `json:"nickname"`

	Uflag        ptttype.UFlag `json:"flag"`
	Userlevel    ptttype.PERM  `json:"perm"`
	Numlogindays int           `json:"login_days"`
	Numposts     int           `json:"posts"`
	Firstlogin   types.Time8   `json:"first_login"`
	Lastlogin    types.Time8   `json:"last_login"`
	LastIP       string        `json:"last_ip"`
	LastHost     string        `json:"last_host"` // ip 的中文呈現, 外國則為國家.

	Money    int    `json:"money"`
	PttEmail string `json:"pttemail"`
	Justify  string `json:"justify"`
	Over18   bool   `json:"over18"`

	PagerUIType uint8             `json:"pager_ui"` /* 呼叫器界面類別 (was: WATER_*) */
	Pager       ptttype.PagerMode `json:"pager"`    /* 呼叫器狀態 */
	Invisible   bool              `json:"invisible"`
	Exmailbox   uint32            `json:"exmail"`

	Career        string      `json:"career"`
	Role          uint32      `json:"role"`
	LastSeen      types.Time8 `json:"last_seen"`
	TimeSetAngel  types.Time8 `json:"time_set_angel"`
	TimePlayAngel types.Time8 `json:"time_play_angel"`

	LastSong  types.Time8 `json:"last_song"`
	LoginView uint32      `json:"login_view"`

	Vlcount        int `json:"violation"`
	FiveWin        int `json:"five_win"`
	FiveLose       int `json:"five_lose"`
	FiveTie        int `json:"five_tie"`
	ChcWin         int `json:"chc_win"`
	ChcLose        int `json:"chc_lose"`
	ChcTie         int `json:"chc_tie"`
	Conn6Win       int `json:"conn6_win"`
	Conn6Lose      int `json:"conn6_lose"`
	Conn6Tie       int `json:"conn6_tie"`
	GoWin          int `json:"go_win"`
	GoLose         int `json:"go_lose"`
	GoTie          int `json:"go_tie"`
	DarkWin        int `json:"dark_win"`
	DarkLose       int `json:"dark_lose"`
	DarkTie        int `json:"dark_tie"`   /* 暗棋戰績 和 */
	ChessEloRating int `json:"chess_rank"` /* 象棋等級 */

	UaVersion uint8 `json:"ua_version"`

	Signature uint8       `json:"signaure"` /* 慣用簽名檔 */
	BadPost   int         `json:"bad_post"` /* 評價為壞文章數 */
	MyAngel   bbs.UUserID `json:"angel"`    /* 我的小天使 */

	TimeRemoveBadPost types.Time8 `json:"time_remove_bad_post"`
	TimeViolateLaw    types.Time8 `json:"time_violate_law"`

	IsDeleted bool        `json:"deleted"`
	UpdateTS  types.Time8 `json:"update_ts"`

	UserLevel2 ptttype.PERM2 `bson:"perm2"`
	UpdateTS2  types.Time8   `bson:"update_ts2"`

	Avatar   []byte      `json:"avatar"`
	AvatarTS types.Time8 `json:"avatar_ts"`

	Email    string      `json:"email"`
	EmailSet bool        `json:"email_set"`
	EmailTS  types.Time8 `json:"email_ts"`

	TwoFactorEnabled   bool        `json:"twofactor_enabled"`
	TwoFactorEnabledTS types.Time8 `json:"twofactor_enabled_ts"`

	IDEmail    string      `json:"idemail"`
	IDEmailSet bool        `json:"idemail_set"`
	IDEmailTS  types.Time8 `json:"idemail_ts"`

	TokenUser bbs.UUserID `json:"tokenuser"`
}

func NewUserInfoResult added in v0.6.0

func NewUserInfoResult(userDetail_db *schema.UserDetail, userNewInfo_db *schema.UserNewInfo, userIDEmail_db *schema.UserIDEmail, userEmail_db *schema.UserEmail, userID bbs.UUserID) (result *GetUserInfoResult)

type GetUserVisitCountResult added in v0.24.0

type GetUserVisitCountResult struct {
	Total int64 `json:"total"`

	TokenUser bbs.UUserID `json:"tokenuser"`
}

type GetVersionResult added in v0.13.6

type GetVersionResult struct {
	Version    string `json:"version"`
	GitVersion string `json:"commit"`

	PttVersion    string `json:"pttversion"`
	PttGitVersion string `json:"pttcommit"`
}

type HTMLPath added in v0.5.0

type HTMLPath struct {
	Path string `uri:"path"`
}

type IndexParams

type IndexParams struct {
	In int `form:"in,omitempty"`
}

func NewIndexParams added in v0.2.1

func NewIndexParams() *IndexParams

type IndexResult

type IndexResult struct {
	Data interface{}
}

type LoadArticleCommentsParams added in v0.3.0

type LoadArticleCommentsParams struct {
	StartIdx   string `json:"start_idx,omitempty" form:"start_idx,omitempty" url:"start_idx,omitempty"`
	Descending bool   `json:"desc,omitempty"  form:"desc,omitempty" url:"desc,omitempty"`
	Max        int    `json:"limit,omitempty" form:"limit,omitempty" url:"limit,omitempty"`
}

func NewLoadArticleCommentsParams added in v0.4.0

func NewLoadArticleCommentsParams() *LoadArticleCommentsParams

type LoadArticleCommentsPath added in v0.3.0

type LoadArticleCommentsPath struct {
	FBoardID   apitypes.FBoardID   `uri:"bid"`
	FArticleID apitypes.FArticleID `uri:"aid"`
}

type LoadArticleCommentsResult added in v0.3.0

type LoadArticleCommentsResult struct {
	List    []*apitypes.Comment `json:"list"`
	NextIdx string              `json:"next_idx"`

	TokenUser bbs.UUserID `json:"tokenuser,omitempty"`
}

func NewLoadArticleCommentsResult added in v0.10.0

func NewLoadArticleCommentsResult(comments_db []*schema.Comment, nextComment *schema.Comment, userID bbs.UUserID) (result *LoadArticleCommentsResult)

type LoadAutoCompleteBoardsParams added in v0.11.0

type LoadAutoCompleteBoardsParams struct {
	Keyword   string `json:"brdname,omitempty" form:"brdname,omitempty" url:"brdname,omitempty"`
	StartIdx  string `json:"start_idx,omitempty" form:"start_idx,omitempty" url:"start_idx,omitempty"`
	Ascending bool   `json:"asc,omitempty"  form:"asc,omitempty" url:"asc,omitempty"`
	Max       int    `json:"limit,omitempty" form:"limit,omitempty" url:"limit,omitempty"`
}

func NewLoadAutoCompleteBoardsParams added in v0.11.0

func NewLoadAutoCompleteBoardsParams() *LoadAutoCompleteBoardsParams

type LoadBottomArticlesPath added in v0.3.0

type LoadBottomArticlesPath struct {
	FBoardID apitypes.FBoardID `uri:"bid"`
}

type LoadBottomArticlesResult added in v0.3.0

type LoadBottomArticlesResult struct {
	List []*apitypes.ArticleSummary `json:"list"`

	TokenUser bbs.UUserID `json:"tokenuser,omitempty"`
}

func NewLoadBottomArticlesResult added in v0.18.0

func NewLoadBottomArticlesResult(a_db []*schema.ArticleSummary, userReadArticleMap map[bbs.ArticleID]bool, userID bbs.UUserID) *LoadBottomArticlesResult

type LoadClassBoardsParams added in v0.21.0

type LoadClassBoardsParams struct {
	StartIdx string          `json:"start_idx,omitempty" form:"start_idx,omitempty" url:"start_idx,omitempty"`
	SortBy   ptttype.BSortBy `json:"sortby,omitempty" form:"sortby,omitempty" url:"sortby,omitempty"`

	Ascending bool `json:"asc,omitempty"  form:"asc,omitempty" url:"asc,omitempty"`
	Max       int  `json:"limit,omitempty" form:"limit,omitempty" url:"limit,omitempty"`
}

func NewLoadClassBoardsParams added in v0.21.0

func NewLoadClassBoardsParams() *LoadClassBoardsParams

type LoadClassBoardsPath added in v0.21.0

type LoadClassBoardsPath struct {
	ClsID ptttype.Bid `uri:"clsid"`
}

type LoadClassBoardsResult added in v0.21.0

type LoadClassBoardsResult struct {
	List    []*apitypes.BoardSummary `json:"list"`
	NextIdx string                   `json:"next_idx"`

	TokenUser bbs.UUserID `json:"tokenuser,omitempty"`
}

func NewLoadClassBoardsResult added in v0.21.0

func NewLoadClassBoardsResult(boardSummaries_db []*schema.BoardSummary, userBoardInfoMap map[bbs.BBoardID]*apitypes.UserBoardInfo, nextIdx string, sortBy ptttype.BSortBy, userID bbs.UUserID) (ret *LoadClassBoardsResult)

type LoadFavoriteBoardsParams added in v0.3.0

type LoadFavoriteBoardsParams struct {
	LevelIdx  schema.LevelIdx `json:"level_idx,omitempty" form:"level_idx,omitempty" url:"level_idx,omitempty"`
	StartIdx  string          `json:"start_idx,omitempty" form:"start_idx,omitempty" url:"start_idx,omitempty"`
	Ascending bool            `json:"asc,omitempty"  form:"asc,omitempty" url:"asc,omitempty"`
	Max       int             `json:"limit,omitempty" form:"limit,omitempty" url:"limit,omitempty"`
}

func NewLoadFavoriteBoardsParams added in v0.4.0

func NewLoadFavoriteBoardsParams() *LoadFavoriteBoardsParams

type LoadFavoriteBoardsPath added in v0.3.0

type LoadFavoriteBoardsPath struct {
	UserID bbs.UUserID `uri:"user_id"`
}

type LoadFavoriteBoardsResult added in v0.3.0

type LoadFavoriteBoardsResult struct {
	List    []*apitypes.BoardSummary `json:"list"`
	NextIdx string                   `json:"next_idx"`

	TokenUser bbs.UUserID `json:"tokenuser,omitempty"`
}

func NewLoadFavoriteBoardsResult added in v0.9.0

func NewLoadFavoriteBoardsResult(userID bbs.UUserID, userFavorites_db []*schema.UserFavorites, boardSummaryMap_db map[ptttype.Bid]*schema.BoardSummary, userBoardInfoMap map[bbs.BBoardID]*apitypes.UserBoardInfo, nextIdx string) (result *LoadFavoriteBoardsResult)

type LoadGeneralArticlesParams added in v0.3.0

type LoadGeneralArticlesParams struct {
	Keyword    string `json:"title,omitempty" form:"title,omitempty" url:"title,omitempty"`
	StartIdx   string `json:"start_idx,omitempty" form:"start_idx,omitempty" url:"start_idx,omitempty"`
	Max        int    `json:"limit,omitempty" form:"limit,omitempty" url:"limit,omitempty"`
	Descending bool   `json:"desc,omitempty"  form:"desc,omitempty" url:"desc,omitempty"`
}

func NewLoadGeneralArticlesParams added in v0.3.0

func NewLoadGeneralArticlesParams() *LoadGeneralArticlesParams

type LoadGeneralArticlesPath added in v0.3.0

type LoadGeneralArticlesPath struct {
	FBoardID apitypes.FBoardID `uri:"bid"`
}

type LoadGeneralArticlesResult added in v0.3.0

type LoadGeneralArticlesResult struct {
	List    []*apitypes.ArticleSummary `json:"list"`
	NextIdx string                     `json:"next_idx"`

	TokenUser bbs.UUserID `json:"tokenuser,omitempty"`
}

func NewLoadGeneralArticlesResult added in v0.4.0

func NewLoadGeneralArticlesResult(a_db []*schema.ArticleSummary, userReadArticleMap map[bbs.ArticleID]bool, nextIdx string, userID bbs.UUserID) *LoadGeneralArticlesResult

func NewLoadGeneralArticlesResultByKeyword added in v0.19.4

func NewLoadGeneralArticlesResultByKeyword(a_db []*schema.ArticleSummary, userReadArticleMap map[bbs.ArticleID]types.NanoTS, nextIdx string, userID bbs.UUserID) (result *LoadGeneralArticlesResult)

type LoadGeneralBoardsParams added in v0.2.1

type LoadGeneralBoardsParams struct {
	Title     string `json:"title,omitempty" form:"title,omitempty" url:"title,omitempty"`
	Keyword   string `json:"keyword,omitempty" form:"keyword,omitempty" url:"keyword,omitempty"`
	StartIdx  string `json:"start_idx,omitempty" form:"start_idx,omitempty" url:"start_idx,omitempty"`
	Ascending bool   `json:"asc,omitempty"  form:"asc,omitempty" url:"asc,omitempty"`
	Max       int    `json:"limit,omitempty" form:"limit,omitempty" url:"limit,omitempty"`
}

func NewLoadGeneralBoardsParams added in v0.2.1

func NewLoadGeneralBoardsParams() *LoadGeneralBoardsParams

type LoadGeneralBoardsResult added in v0.2.1

type LoadGeneralBoardsResult struct {
	List    []*apitypes.BoardSummary `json:"list"`
	NextIdx string                   `json:"next_idx"`

	TokenUser bbs.UUserID `json:"tokenuser,omitempty"`
}

func NewLoadGeneralBoardsResult added in v0.4.0

func NewLoadGeneralBoardsResult(boardSummaries_db []*schema.BoardSummary, userBoardInfoMap map[bbs.BBoardID]*apitypes.UserBoardInfo, nextIdx string, url string, userID bbs.UUserID) *LoadGeneralBoardsResult

type LoadManArticlesParams added in v0.28.0

type LoadManArticlesParams struct {
	LevelIdx apitypes.FArticleID `json:"level_idx,omitempty" form:"level_idx,omitempty" url:"level_idx,omitempty"`
}

type LoadManArticlesPath added in v0.28.0

type LoadManArticlesPath struct {
	FBoardID apitypes.FBoardID `uri:"bid"`
}

type LoadManArticlesResult added in v0.28.0

type LoadManArticlesResult struct {
	List []*apitypes.ManArticleSummary `json:"list"`

	TokenUser bbs.UUserID `json:"tokenuser,omitempty"`
}

func NewLoadManArticlesResult added in v0.28.0

func NewLoadManArticlesResult(articleSummaries_db []*schema.ManArticleSummary, userID bbs.UUserID) (r *LoadManArticlesResult)

type LoadPopularArticlesParams added in v0.3.0

type LoadPopularArticlesParams struct {
	StartIdx   string `json:"start_idx,omitempty" form:"start_idx,omitempty" url:"start_idx,omitempty"`
	Max        int    `json:"limit,omitempty" form:"limit,omitempty" url:"limit,omitempty"`
	Descending bool   `json:"desc,omitempty"  form:"desc,omitempty" url:"desc,omitempty"`
}

func NewLoadPopularArticlesParams added in v0.4.0

func NewLoadPopularArticlesParams() *LoadPopularArticlesParams

type LoadPopularArticlesResult added in v0.3.0

type LoadPopularArticlesResult struct {
	List    []*apitypes.ArticleSummary `json:"list"`
	NextIdx string                     `json:"next_idx"`

	TokenUser bbs.UUserID `json:"tokenuser,omitempty"`
}

type LoadPopularBoardsResult added in v0.3.0

type LoadPopularBoardsResult struct {
	List []*apitypes.BoardSummary `json:"list"`

	TokenUser bbs.UUserID `json:"tokenuser,omitempty"`
}

func NewLoadPopularBoardsResult added in v0.9.0

func NewLoadPopularBoardsResult(boardSummaries_db []*schema.BoardSummary, userBoardInfoMap map[bbs.BBoardID]*apitypes.UserBoardInfo, userID bbs.UUserID) *LoadPopularBoardsResult

type LoadUserArticlesParams added in v0.3.0

type LoadUserArticlesParams struct {
	StartIdx   string `json:"start_idx,omitempty" form:"start_idx,omitempty" url:"start_idx,omitempty"`
	Descending bool   `json:"desc,omitempty"  form:"desc,omitempty" url:"desc,omitempty"`
	Max        int    `json:"limit,omitempty" form:"limit,omitempty" url:"limit,omitempty"`
}

func NewUserArticlesParams added in v0.4.0

func NewUserArticlesParams() *LoadUserArticlesParams

type LoadUserArticlesPath added in v0.3.0

type LoadUserArticlesPath struct {
	UserID bbs.UUserID `uri:"user_id"`
}

type LoadUserArticlesResult added in v0.3.0

type LoadUserArticlesResult struct {
	List    []*apitypes.ArticleSummary `json:"list"`
	NextIdx string                     `json:"next_idx"`

	TokenUser bbs.UUserID `json:"tokenuser,omitempty"`
}

func NewLoadUserArticlesResult added in v0.19.0

func NewLoadUserArticlesResult(a_db []*schema.ArticleSummary, userReadArticleMap map[bbs.ArticleID]bool, nextIdx string, userID bbs.UUserID) *LoadUserArticlesResult

type LoadUserCommentsParams added in v0.3.0

type LoadUserCommentsParams struct {
	StartIdx   string `json:"start_idx,omitempty" form:"start_idx,omitempty" url:"start_idx,omitempty"`
	Descending bool   `json:"desc,omitempty"  form:"desc,omitempty" url:"desc,omitempty"`
	Max        int    `json:"limit,omitempty" form:"limit,omitempty" url:"limit,omitempty"`
}

func NewLoadUserCommentsParams added in v0.4.0

func NewLoadUserCommentsParams() *LoadUserCommentsParams

type LoadUserCommentsPath added in v0.3.0

type LoadUserCommentsPath struct {
	UserID bbs.UUserID `uri:"user_id"`
}

type LoadUserCommentsResult added in v0.3.0

type LoadUserCommentsResult struct {
	List    []*apitypes.ArticleComment `json:"list"`
	NextIdx string                     `json:"next_idx"`

	TokenUser bbs.UUserID `json:"tokenuser,omitempty"`
}

func NewLoadUserCommentsResult added in v0.19.0

func NewLoadUserCommentsResult(
	commentSummaries_db []*schema.CommentSummary,
	articleSummaryMap map[bbs.ArticleID]*schema.ArticleSummary,
	userReadArticleMap map[bbs.ArticleID]types.NanoTS,
	nextIdx string,
	userID bbs.UUserID,
) (result *LoadUserCommentsResult)

type LoginLog added in v0.21.0

type LoginLog struct {
	ClientInfo
	LoginID   string
	LoginTime types.NanoTS
	LoginIP   string
	IsSuccess bool
}

LoginLog record user login info, no matter success or not

func (*LoginLog) String added in v0.21.0

func (l *LoginLog) String() string

type LoginParams added in v0.1.0

type LoginParams struct {
	ClientID     string `json:"client_id" form:"client_id"`
	ClientSecret string `json:"client_secret" form:"client_secret"`

	Username string `json:"username" form:"username"`
	Password string `json:"password" form:"password"`
}

func NewLoginParams added in v0.2.1

func NewLoginParams() *LoginParams

type LoginRequiredAPIFunc added in v0.18.0

type LoginRequiredAPIFunc func(remoteAddr string, userID bbs.UUserID, params interface{}, c *gin.Context) (result interface{}, statusCode int, err error)

type LoginRequiredPathAPIFunc added in v0.18.0

type LoginRequiredPathAPIFunc func(remoteAddr string, userID bbs.UUserID, params interface{}, path interface{}, c *gin.Context) (result interface{}, statusCode int, err error)

type LoginResult added in v0.1.0

type LoginResult struct {
	UserID        bbs.UUserID `json:"user_id"`
	AccessToken   string      `json:"access_token"`
	TokenType     string      `json:"token_type"`
	RefreshToken  string      `json:"refresh_token"`
	AccessExpire  types.Time8 `json:"access_expire"`
	RefreshExpire types.Time8 `json:"refresh_expire"`

	TokenUser bbs.UUserID `json:"tokenuser"`
}

func NewLoginResult added in v0.4.0

func NewLoginResult(result_b *pttbbsapi.LoginResult) *LoginResult

type RedirectPathAPIFunc added in v0.18.0

type RedirectPathAPIFunc func(remoteAddr string, params interface{}, path interface{}, c *gin.Context) (redirectPath string, statusCode int)

type RefreshParams added in v0.32.0

type RefreshParams struct {
	ClientID     string `json:"client_id" form:"client_id"`
	ClientSecret string `json:"client_secret" form:"client_secret"`

	RefreshToken string `json:"refresh_token"`
}

type RefreshResult added in v0.32.0

type RefreshResult LoginResult

type RegisterClientParams added in v0.1.0

type RegisterClientParams struct {
	ClientID   string           `json:"client_id"`
	ClientType types.ClientType `json:"client_type"`
}

func NewRegisterClientParams added in v0.2.1

func NewRegisterClientParams() *RegisterClientParams

type RegisterClientResult added in v0.1.0

type RegisterClientResult struct {
	ClientSecret string `json:"client_secret"`

	TokenUser bbs.UUserID `json:"tokenuser,omitempty"`
}

func NewRegisterClientResult added in v0.4.0

func NewRegisterClientResult(client *schema.Client, userID bbs.UUserID) *RegisterClientResult

type RegisterUserParams added in v0.1.0

type RegisterUserParams struct {
	ClientID     string `json:"client_id" form:"client_id"`
	ClientSecret string `json:"client_secret" form:"client_secret"`

	Username        string `json:"username" form:"username"`
	Password        string `json:"password" form:"password"`
	PasswordConfirm string `json:"password_confirm" form:"password_confirm"`

	TwoFactorToken string `json:"token" form:"token"`

	Over18 bool `json:"over18,omitempty" form:"over18,omitempty"`

	Email    string `json:"email" form:"email"`
	Nickname string `json:"nickname,omitempty" form:"nickname,omitempty"`
	Realname string `json:"realname,omitempty" form:"realname,omitempty"`
	Career   string `json:"career,omitempty" form:"career,omitempty"`
}

func NewRegisterUserParams added in v0.2.1

func NewRegisterUserParams() *RegisterUserParams

type RegisterUserResult added in v0.1.0

type RegisterUserResult LoginResult

func NewRegisterUserResult added in v0.4.0

func NewRegisterUserResult(result_b *pttbbsapi.RegisterResult) *RegisterUserResult

type ReplyCommentsParams added in v0.22.0

type ReplyCommentsParams struct {
	TheList []*apitypes.ReplyCommentParams `json:"list" form:"list" url:"list"`
}

type ReplyCommentsPath added in v0.22.0

type ReplyCommentsPath struct {
	FBoardID   apitypes.FBoardID   `uri:"bid"`
	FArticleID apitypes.FArticleID `uri:"aid"`
}

type ReplyCommentsResult added in v0.22.0

type ReplyCommentsResult struct {
	Success bool `json:"success"`

	TokenUser bbs.UUserID `json:"tokenuser"`
}

type SetIDEmailParams added in v0.8.0

type SetIDEmailParams struct {
	ClientID     string `json:"client_id" form:"client_id"`
	ClientSecret string `json:"client_secret" form:"client_secret"`
	Jwt          string `json:"token" form:"token" url:"token"`
}

type SetIDEmailPath added in v0.8.0

type SetIDEmailPath struct {
	UserID bbs.UUserID `uri:"user_id"`
}

type SetIDEmailResult added in v0.8.0

type SetIDEmailResult struct {
	Email string `json:"idemail"`

	TokenUser bbs.UUserID `json:"tokenuser"`
}

Jump to

Keyboard shortcuts

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