enumerate.go 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358
  1. // package conf 为配置相关.
  2. package conf
  3. import (
  4. "strings"
  5. "fmt"
  6. "os"
  7. "path/filepath"
  8. "strconv"
  9. "github.com/astaxie/beego"
  10. )
  11. // 登录用户的Session名
  12. const LoginSessionName = "LoginSessionName"
  13. const CaptchaSessionName = "__captcha__"
  14. const RegexpEmail = "^[a-zA-Z0-9.!#$%&'*+\\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$"
  15. //允许用户名中出现点号
  16. // const RegexpAccount = `^[a-zA-Z][a-zA-Z0-9\.-]{2,50}$`
  17. const RegexpAccount = `[a-zA-Z0-9\.-]{2,50}$`
  18. // PageSize 默认分页条数.
  19. const PageSize = 10
  20. // 用户权限
  21. const (
  22. // 超级管理员.
  23. MemberSuperRole SystemRole = iota
  24. //普通管理员.
  25. MemberAdminRole
  26. //普通用户.
  27. MemberGeneralRole
  28. )
  29. //系统角色
  30. type SystemRole int
  31. const (
  32. // 创始人.
  33. BookFounder BookRole = iota
  34. //管理者
  35. BookAdmin
  36. //编辑者.
  37. BookEditor
  38. //观察者
  39. BookObserver
  40. )
  41. //项目角色
  42. type BookRole int
  43. const (
  44. LoggerOperate = "operate"
  45. LoggerSystem = "system"
  46. LoggerException = "exception"
  47. LoggerDocument = "document"
  48. )
  49. const (
  50. //本地账户校验
  51. AuthMethodLocal = "local"
  52. //LDAP用户校验
  53. AuthMethodLDAP = "ldap"
  54. )
  55. var (
  56. VERSION string
  57. BUILD_TIME string
  58. GO_VERSION string
  59. )
  60. var (
  61. ConfigurationFile = "./conf/app.conf"
  62. WorkingDirectory = "./"
  63. LogFile = "./runtime/logs"
  64. BaseUrl = ""
  65. AutoLoadDelay = 0
  66. )
  67. // app_key
  68. func GetAppKey() string {
  69. return beego.AppConfig.DefaultString("app_key", "mindoc")
  70. }
  71. func GetDatabasePrefix() string {
  72. return beego.AppConfig.DefaultString("db_prefix", "md_")
  73. }
  74. //获取默认头像
  75. func GetDefaultAvatar() string {
  76. return URLForWithCdnImage(beego.AppConfig.DefaultString("avatar", "/static/images/headimgurl.jpg"))
  77. }
  78. //获取阅读令牌长度.
  79. func GetTokenSize() int {
  80. return beego.AppConfig.DefaultInt("token_size", 12)
  81. }
  82. //获取默认文档封面.
  83. func GetDefaultCover() string {
  84. return URLForWithCdnImage(beego.AppConfig.DefaultString("cover", "/static/images/book.jpg"))
  85. }
  86. //获取允许的商城文件的类型.
  87. func GetUploadFileExt() []string {
  88. ext := beego.AppConfig.DefaultString("upload_file_ext", "png|jpg|jpeg|gif|txt|doc|docx|pdf")
  89. temp := strings.Split(ext, "|")
  90. exts := make([]string, len(temp))
  91. i := 0
  92. for _, item := range temp {
  93. if item != "" {
  94. exts[i] = item
  95. i++
  96. }
  97. }
  98. return exts
  99. }
  100. // 获取上传文件允许的最大值
  101. func GetUploadFileSize() int64 {
  102. size := beego.AppConfig.DefaultString("upload_file_size", "0")
  103. if strings.HasSuffix(size, "MB") {
  104. if s, e := strconv.ParseInt(size[0:len(size)-2], 10, 64); e == nil {
  105. return s * 1024 * 1024
  106. }
  107. }
  108. if strings.HasSuffix(size, "GB") {
  109. if s, e := strconv.ParseInt(size[0:len(size)-2], 10, 64); e == nil {
  110. return s * 1024 * 1024 * 1024
  111. }
  112. }
  113. if strings.HasSuffix(size, "KB") {
  114. if s, e := strconv.ParseInt(size[0:len(size)-2], 10, 64); e == nil {
  115. return s * 1024
  116. }
  117. }
  118. if s, e := strconv.ParseInt(size, 10, 64); e == nil {
  119. return s * 1024
  120. }
  121. return 0
  122. }
  123. //是否启用导出
  124. func GetEnableExport() bool {
  125. return beego.AppConfig.DefaultBool("enable_export", true)
  126. }
  127. //同一项目导出线程的并发数
  128. func GetExportProcessNum() int {
  129. exportProcessNum := beego.AppConfig.DefaultInt("export_process_num", 1)
  130. if exportProcessNum <= 0 || exportProcessNum > 4 {
  131. exportProcessNum = 1
  132. }
  133. return exportProcessNum
  134. }
  135. //导出项目队列的并发数量
  136. func GetExportLimitNum() int {
  137. exportLimitNum := beego.AppConfig.DefaultInt("export_limit_num", 1)
  138. if exportLimitNum < 0 {
  139. exportLimitNum = 1
  140. }
  141. return exportLimitNum
  142. }
  143. //等待导出队列的长度
  144. func GetExportQueueLimitNum() int {
  145. exportQueueLimitNum := beego.AppConfig.DefaultInt("export_queue_limit_num", 10)
  146. if exportQueueLimitNum <= 0 {
  147. exportQueueLimitNum = 100
  148. }
  149. return exportQueueLimitNum
  150. }
  151. //默认导出项目的缓存目录
  152. func GetExportOutputPath() string {
  153. exportOutputPath := filepath.Join(beego.AppConfig.DefaultString("export_output_path", filepath.Join(WorkingDirectory, "cache")), "books")
  154. return exportOutputPath
  155. }
  156. //判断是否是允许商城的文件类型.
  157. func IsAllowUploadFileExt(ext string) bool {
  158. if strings.HasPrefix(ext, ".") {
  159. ext = string(ext[1:])
  160. }
  161. exts := GetUploadFileExt()
  162. for _, item := range exts {
  163. if item == "*" {
  164. return true
  165. }
  166. if strings.EqualFold(item, ext) {
  167. return true
  168. }
  169. }
  170. return false
  171. }
  172. //重写生成URL的方法,加上完整的域名
  173. func URLFor(endpoint string, values ...interface{}) string {
  174. baseUrl := beego.AppConfig.DefaultString("baseurl", "")
  175. pathUrl := beego.URLFor(endpoint, values...)
  176. if baseUrl == "" {
  177. baseUrl = BaseUrl
  178. }
  179. if strings.HasPrefix(pathUrl, "http://") {
  180. return pathUrl
  181. }
  182. if strings.HasPrefix(pathUrl, "/") && strings.HasSuffix(baseUrl, "/") {
  183. return baseUrl + pathUrl[1:]
  184. }
  185. if !strings.HasPrefix(pathUrl, "/") && !strings.HasSuffix(baseUrl, "/") {
  186. return baseUrl + "/" + pathUrl
  187. }
  188. return baseUrl + beego.URLFor(endpoint, values...)
  189. }
  190. func URLForNotHost(endpoint string, values ...interface{}) string {
  191. baseUrl := beego.AppConfig.DefaultString("baseurl", "")
  192. pathUrl := beego.URLFor(endpoint, values...)
  193. if baseUrl == "" {
  194. baseUrl = "/"
  195. }
  196. if strings.HasPrefix(pathUrl, "http://") {
  197. return pathUrl
  198. }
  199. if strings.HasPrefix(pathUrl, "/") && strings.HasSuffix(baseUrl, "/") {
  200. return baseUrl + pathUrl[1:]
  201. }
  202. if !strings.HasPrefix(pathUrl, "/") && !strings.HasSuffix(baseUrl, "/") {
  203. return baseUrl + "/" + pathUrl
  204. }
  205. return baseUrl + beego.URLFor(endpoint, values...)
  206. }
  207. func URLForWithCdnImage(p string) string {
  208. if strings.HasPrefix(p, "http://") || strings.HasPrefix(p, "https://") {
  209. return p
  210. }
  211. cdn := beego.AppConfig.DefaultString("cdnimg", "")
  212. //如果没有设置cdn,则使用baseURL拼接
  213. if cdn == "" {
  214. baseUrl := beego.AppConfig.DefaultString("baseurl", "/")
  215. if strings.HasPrefix(p, "/") && strings.HasSuffix(baseUrl, "/") {
  216. return baseUrl + p[1:]
  217. }
  218. if !strings.HasPrefix(p, "/") && !strings.HasSuffix(baseUrl, "/") {
  219. return baseUrl + "/" + p
  220. }
  221. return baseUrl + p
  222. }
  223. if strings.HasPrefix(p, "/") && strings.HasSuffix(cdn, "/") {
  224. return cdn + string(p[1:])
  225. }
  226. if !strings.HasPrefix(p, "/") && !strings.HasSuffix(cdn, "/") {
  227. return cdn + "/" + p
  228. }
  229. return cdn + p
  230. }
  231. func URLForWithCdnCss(p string, v ...string) string {
  232. cdn := beego.AppConfig.DefaultString("cdncss", "")
  233. if strings.HasPrefix(p, "http://") || strings.HasPrefix(p, "https://") {
  234. return p
  235. }
  236. filePath := WorkingDir(p)
  237. if f, err := os.Stat(filePath); err == nil && !strings.Contains(p, "?") && len(v) > 0 && v[0] == "version" {
  238. p = p + fmt.Sprintf("?v=%s", f.ModTime().Format("20060102150405"))
  239. }
  240. //如果没有设置cdn,则使用baseURL拼接
  241. if cdn == "" {
  242. baseUrl := beego.AppConfig.DefaultString("baseurl", "/")
  243. if strings.HasPrefix(p, "/") && strings.HasSuffix(baseUrl, "/") {
  244. return baseUrl + p[1:]
  245. }
  246. if !strings.HasPrefix(p, "/") && !strings.HasSuffix(baseUrl, "/") {
  247. return baseUrl + "/" + p
  248. }
  249. return baseUrl + p
  250. }
  251. if strings.HasPrefix(p, "/") && strings.HasSuffix(cdn, "/") {
  252. return cdn + string(p[1:])
  253. }
  254. if !strings.HasPrefix(p, "/") && !strings.HasSuffix(cdn, "/") {
  255. return cdn + "/" + p
  256. }
  257. return cdn + p
  258. }
  259. func URLForWithCdnJs(p string, v ...string) string {
  260. cdn := beego.AppConfig.DefaultString("cdnjs", "")
  261. if strings.HasPrefix(p, "http://") || strings.HasPrefix(p, "https://") {
  262. return p
  263. }
  264. filePath := WorkingDir(p)
  265. if f, err := os.Stat(filePath); err == nil && !strings.Contains(p, "?") && len(v) > 0 && v[0] == "version" {
  266. p = p + fmt.Sprintf("?v=%s", f.ModTime().Format("20060102150405"))
  267. }
  268. //如果没有设置cdn,则使用baseURL拼接
  269. if cdn == "" {
  270. baseUrl := beego.AppConfig.DefaultString("baseurl", "/")
  271. if strings.HasPrefix(p, "/") && strings.HasSuffix(baseUrl, "/") {
  272. return baseUrl + p[1:]
  273. }
  274. if !strings.HasPrefix(p, "/") && !strings.HasSuffix(baseUrl, "/") {
  275. return baseUrl + "/" + p
  276. }
  277. return baseUrl + p
  278. }
  279. if strings.HasPrefix(p, "/") && strings.HasSuffix(cdn, "/") {
  280. return cdn + string(p[1:])
  281. }
  282. if !strings.HasPrefix(p, "/") && !strings.HasSuffix(cdn, "/") {
  283. return cdn + "/" + p
  284. }
  285. return cdn + p
  286. }
  287. func WorkingDir(elem ...string) string {
  288. elems := append([]string{WorkingDirectory}, elem...)
  289. return filepath.Join(elems...)
  290. }
  291. func init() {
  292. if p, err := filepath.Abs("./conf/app.conf"); err == nil {
  293. ConfigurationFile = p
  294. }
  295. if p, err := filepath.Abs("./"); err == nil {
  296. WorkingDirectory = p
  297. }
  298. if p, err := filepath.Abs("./runtime/logs"); err == nil {
  299. LogFile = p
  300. }
  301. }