types

package
v0.36.3 Latest Latest
Warning

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

Go to latest
Published: Oct 2, 2024 License: GPL-3.0 Imports: 13 Imported by: 0

Documentation

Index

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 Big5ToUtf8(big5 []byte) (utf8 string)

func DateMinStrToTime

func DateMinStrToTime(dateTimeStr string) (time.Time, error)

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

func DateStrToTime(dateStr string) (time.Time, error)

DateStrToTime

(YYYY/)MM/DD

used in old-comment.

golang requires year to parse TIMEZONE with CST. https://github.com/golang/go/issues/34101

func DateYearTimeStrToTime

func DateYearTimeStrToTime(dateYearTimeStr string) (time.Time, error)

DateYearTimeStrToTime

MM/DD/YYYY hh:mm:ss

used in edit (編輯)

func InitConfig

func InitConfig() (err error)

func IsReplyID

func IsReplyID(commentID CommentID) bool

func NewDateTime

func NewDateTime(year int, month time.Month, day int, hr int, minute int, second int) time.Time

func SetIsTest

func SetIsTest(pkgName string)

func StringsSplitAsRune

func StringsSplitAsRune(str string, sep string) (strs []string)

StringsSplitAsRune

sep: single-rune string

func UnsetIsTest

func UnsetIsTest(pkgName string)

func Utf8ToBig5

func Utf8ToBig5(utf8 string) (big5 []byte)

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

func (b BoardArticleID) Deserialize() (boardID bbs.BBoardID, articleID bbs.ArticleID, err error)

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

func (c *Color) BytesWithPreColor(color *Color) (theBytes []byte)

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
)

func (ColorMap) String

func (c ColorMap) String() string

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

func ToCommentID(nanoTS NanoTS, md5 string) CommentID

func ToReplyID

func ToReplyID(commentID CommentID) CommentID

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

func ToContentID(nanoTS NanoTS, md5 string) ContentID

type ManArticleID

type ManArticleID string

ManArticleID

func (ManArticleID) ToCreateTime

func (m ManArticleID) ToCreateTime() (createTime NanoTS)

type NanoTS

type NanoTS int64

func Base64ToNanoTS

func Base64ToNanoTS(b64 string) (NanoTS, error)

func NowNanoTS

func NowNanoTS() NanoTS

func Time4ToNanoTS

func Time4ToNanoTS(t pttbbstypes.Time4) NanoTS

func TimeToNanoTS

func TimeToNanoTS(t time.Time) NanoTS

func (NanoTS) Base64

func (t NanoTS) Base64() string

func (NanoTS) ToNanoTSByMin

func (t NanoTS) ToNanoTSByMin() NanoTS

ToNanoTSByMin

nano-ts by minutes. used in comment-time-slot.

func (NanoTS) ToTime

func (t NanoTS) ToTime() time.Time

func (NanoTS) ToTime4

func (t NanoTS) ToTime4() pttbbstypes.Time4

func (NanoTS) ToTime8

func (t NanoTS) ToTime8() Time8

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

func (r *Rune) Utf8ToDBCS(origColor Color, isAddCR bool)

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"
)

type Time8

type Time8 int64

func (Time8) ToNanoTS

func (t Time8) ToNanoTS() NanoTS

Jump to

Keyboard shortcuts

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