Documentation ¶
Index ¶
- Constants
- Variables
- func Big5ToUtf8(big5 []byte) (utf8 string)
- func DateMinStrToTime(dateTimeStr string) (time.Time, error)
- func DateStrToTime(dateStr string) (time.Time, error)
- func DateYearTimeStrToTime(dateYearTimeStr string) (time.Time, error)
- func InitConfig() (err error)
- func IsReplyID(commentID CommentID) bool
- func NewDateTime(year int, month time.Month, day int, hr int, minute int, second int) time.Time
- func SetIsTest(pkgName string)
- func StringsSplitAsRune(str string, sep string) (strs []string)
- func UnsetIsTest(pkgName string)
- func Utf8ToBig5(utf8 string) (big5 []byte)
- type BoardArticleID
- type ClientType
- type Color
- type ColorMap
- type CommentID
- type ContentID
- type ManArticleID
- type NanoTS
- type ReadStatus
- type Rune
- type ServiceMode
- type Time8
Constants ¶
View Source
const ( TS_TO_NANO_TS = NanoTS(1000000000) // 10^9 MIN_TO_NANO_TS = NanoTS(60) * TS_TO_NANO_TS YEAR_NANO_TS = NanoTS(365*86400) * TS_TO_NANO_TS )
Variables ¶
View Source
var ( SERVICE_MODE = DEV // can be DEV, PRODUCTION, INFO, DEBUG HTTP_HOST = "localhost:3457" // serving http-host URL_PREFIX = "http://localhost:3457/bbs" // advertising url-prefix BACKEND_PREFIX = "http://localhost:3456/v1" // backend url-prefix FRONTEND_PREFIX = "http://localhost:3457" // frontend-prefix, email API_PREFIX = "/api" // api-prefix PTTSYSOP = bbs.UUserID("SYSOP") BBSNAME = "新批踢踢" /* 中文站名 */ BBSENAME = "PTT2" /* 英文站名 */ // web STATIC_DIR = "static" ALLOW_ORIGINS = []string{} ALLOW_ORIGINS_MAP = map[string]bool{} BLOCKED_REFERERS = []string{} BLOCKED_REFERERS_MAP = map[string]bool{} IS_ALLOW_CROSSDOMAIN = true COOKIE_DOMAIN = "localhost" TOKEN_COOKIE_SUFFIX = "Secure;" CSRF_SECRET = []byte("test_csrf_secret") CSRF_TOKEN = "csrftoken" CSRF_TOKEN_TS = 3600 // csrf-token expires in 1 hour. CSRF_TOKEN_TS_DURATION = time.Duration(CSRF_TOKEN_TS) * time.Second ACCESS_TOKEN_NAME = "token" // access-token-name in cookie ACCESS_TOKEN_EXPIRE_TS = 86400 ACCESS_TOKEN_EXPIRE_TS_DURATION = time.Duration(ACCESS_TOKEN_EXPIRE_TS) * time.Second // email EMAIL_TOKEN_NAME = "token" // email-token in email-url EMAIL_FROM = "noreply@localhost" EMAIL_SERVER = "localhost:25" EMAILTOKEN_TITLE = "更換 " + BBSNAME + " 的聯絡信箱 (Updating " + BBSENAME + " Contact Email)" IDEMAILTOKEN_TITLE = "更換 " + BBSNAME + " 的認證信箱 (Updating " + BBSENAME + " Identity Email)" ATTEMPT_REGISTER_USER_TITLE = "註冊 " + BBSNAME + " 的確認碼 (Registering " + BBSENAME + " Confirmation Code)" EMAILTOKEN_TEMPLATE = "/etc/go-pttbbsweb/emailtoken.template" IDEMAILTOKEN_TEMPLATE = "/etc/go-pttbbsweb/idemailtoken.template" ATTEMPT_REGISTER_USER_TEMPLATE = "/etc/go-pttbbsweb/attemptregister.template" ATTEMPT_REGISTER_USER_TEMPLATE_CONTENT = "__USER__, __TOKEN__" EMAILTOKEN_TEMPLATE_CONTENT = "__EMAIL__, __USER__, __URL__" IDEMAILTOKEN_TEMPLATE_CONTENT = "__EMAIL__, __USER__, __URL__" EXPIRE_USER_ID_EMAIL_IS_SET_NANO_TS = NanoTS(100 * 86400 * 1000000000) // 100 days EXPIRE_USER_EMAIL_IS_SET_NANO_TS = NanoTS(1 * 86400 * 1000000000) // 1 day EXPIRE_USER_ID_EMAIL_IS_NOT_SET_NANO_TS = NanoTS(300 * 1000000000) // 5 mins EXPIRE_USER_EMAIL_IS_NOT_SET_NANO_TS = NanoTS(300 * 1000000000) // 5 mins EXPIRE_ATTEMPT_REGISTER_USER_EMAIL_TS = 300 EXPIRE_ATTEMPT_REGISTER_USER_EMAIL_TS_DURATION = time.Duration(EXPIRE_ATTEMPT_REGISTER_USER_EMAIL_TS) * time.Second // 5 mins // 2fa IS_2FA = true MAX_2FA_TOKEN int64 = 10000 // big5 BIG5_TO_UTF8 = "types/uao250-b2u.big5.txt" UTF8_TO_BIG5 = "types/uao250-u2b.big5.txt" AMBCJK = "types/ambcjk.big5.txt" // time-location TIME_LOCATION = "Asia/Taipei" // carriage-return IS_CARRIAGE_RETURN = true )
View Source
var ( DefaultColor = Color{Foreground: COLOR_FOREGROUND_WHITE, Background: COLOR_BACKGROUND_BLACK} InvalidColor = Color{Foreground: COLOR_INVALID, Background: COLOR_INVALID} ResetColor = Color{Foreground: COLOR_FOREGROUND_WHITE, Background: COLOR_BACKGROUND_BLACK, IsReset: true} )
View Source
var (
TIMEZONE, _ = time.LoadLocation(TIME_LOCATION)
VERSION = ""
GIT_VERSION = ""
LEN_DATE_YEAR_TIME_STR = len("01/02/2006 15:04:05")
LEN_DATE_MIN_STR = len("2006/01/02 15:04")
COLOR_PREFIX_BYTES = []byte("\x1b[")
COLOR_POSTFIX_BYTES = []byte("m")
COLOR_RESET_BYTES = []byte("\x1b[m")
DEFAULT_LEN_COLOR_BYTES = 20 //\x1b[0;1;5;37;40m
POSTTIME_REJECT = 15
)
Functions ¶
func Big5ToUtf8 ¶
func DateMinStrToTime ¶
DateMinStrToTime
(YYYY/)MM/DD hh:mm
used in comment.
golang requires year to parse TIMEZONE with CST. https://github.com/golang/go/issues/34101
func DateStrToTime ¶
DateStrToTime
(YYYY/)MM/DD
used in old-comment.
golang requires year to parse TIMEZONE with CST. https://github.com/golang/go/issues/34101
func InitConfig ¶
func InitConfig() (err error)
func NewDateTime ¶
func UnsetIsTest ¶
func UnsetIsTest(pkgName string)
func Utf8ToBig5 ¶
Types ¶
type BoardArticleID ¶ added in v0.36.0
type BoardArticleID string
func ToBoardArticleID ¶ added in v0.36.0
func ToBoardArticleID(boardID bbs.BBoardID, articleID bbs.ArticleID) BoardArticleID
func (BoardArticleID) Deserialize ¶ added in v0.36.0
type ClientType ¶
type ClientType string
const ( CLIENT_TYPE_APP ClientType = "app" CLIENT_TYPE_WEB ClientType = "web" )
type Color ¶
type Color struct { Foreground ColorMap `json:"foreground" bson:"f"` Background ColorMap `json:"background" bson:"b"` Blink bool `json:"blink" bson:"k"` Highlight bool `json:"highlight" bson:"h"` IsReset bool `json:"reset" bson:"r"` }
func (*Color) BytesWithPreColor ¶
type ColorMap ¶
type ColorMap int8
const ( COLOR_FOREGROUND_BLACK ColorMap = 30 COLOR_FOREGROUND_RED ColorMap = 31 COLOR_FOREGROUND_GREEN ColorMap = 32 COLOR_FOREGROUND_YELLOW ColorMap = 33 COLOR_FOREGROUND_BLUE ColorMap = 34 COLOR_FOREGROUND_MAGENTA ColorMap = 35 COLOR_FOREGROUND_CYAN ColorMap = 36 COLOR_FOREGROUND_WHITE ColorMap = 37 COLOR_BACKGROUND_BLACK ColorMap = 40 COLOR_BACKGROUND_RED ColorMap = 41 COLOR_BACKGROUND_GREEN ColorMap = 42 COLOR_BACKGROUND_YELLOW ColorMap = 43 COLOR_BACKGROUND_BLUE ColorMap = 44 COLOR_BACKGROUND_MAGENTA ColorMap = 45 COLOR_BACKGROUND_CYAN ColorMap = 46 COLOR_BACKGROUND_WHITE ColorMap = 47 COLOR_INVALID ColorMap = -1 )
type CommentID ¶
type CommentID string
CommentID
owner-id is embedded in md5
XXX currently it's very hard to maintain the comment-id. if we do comment-id only based on MD5:
got duplicated md5-id if the owner posts the same comments within 1 min.
if we add the inferred CreateTime into the comment-id:
the CreateTime may be changed if the author deletes some other comments within same minute.
func ToCommentID ¶
type ContentID ¶
type ContentID string
ContentID
ContentID is always queried / updated with ArticleID, ManArticleID. No need to add boardID and articleID inside ContentID.
func ToContentID ¶
type ManArticleID ¶
type ManArticleID string
ManArticleID
func (ManArticleID) ToCreateTime ¶
func (m ManArticleID) ToCreateTime() (createTime NanoTS)
type NanoTS ¶
type NanoTS int64
func Base64ToNanoTS ¶
func Time4ToNanoTS ¶
func Time4ToNanoTS(t pttbbstypes.Time4) NanoTS
func TimeToNanoTS ¶
func (NanoTS) ToTime4 ¶
func (t NanoTS) ToTime4() pttbbstypes.Time4
type ReadStatus ¶
type ReadStatus uint8
const ( READ_STATUS_UNREAD ReadStatus = 0 READ_STATUS_CREATE_TIME ReadStatus = 1 READ_STATUS_COMMENT_TIME ReadStatus = 2 READ_STATUS_MTIME ReadStatus = 3 )
func (ReadStatus) String ¶
func (r ReadStatus) String() string
type Rune ¶
type Rune struct { Utf8 string `json:"text" bson:"utf8"` // utf8-string Big5 []byte `json:"-" bson:"big5"` // big5-bytes, stored in db for debugging. DBCS []byte `json:"-" bson:"dbcs"` // dbcs-bytes, stored in db for concat and debugging. DBCSStr string `json:"-" bson:"dbcsstr"` // dbcs-str, stored in db for concat and debugging. Color0 Color `json:"color0" bson:"color0"` Color1 Color `json:"color1" bson:"color1"` }
func (*Rune) Big5ToUtf8 ¶
func (r *Rune) Big5ToUtf8()
func (*Rune) Utf8ToBig5 ¶
func (r *Rune) Utf8ToBig5()
func (*Rune) Utf8ToDBCS ¶
type ServiceMode ¶
type ServiceMode string
const ( // in DEV mode, client_secret is always test_client_secret, log set to INFO DEV ServiceMode = "DEV" // in PRODUCTION mode, log set to WARN PRODUCTION ServiceMode = "PRODUCTION" // in INFO mode, log set to INFO INFO ServiceMode = "INFO" // in DEBUG mode, log set to DEBUG DEBUG ServiceMode = "DEBUG" // in test mode TEST ServiceMode = "TEST" )
Click to show internal directories.
Click to hide internal directories.