module_index.go 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266
  1. package modules
  2. import (
  3. "database/sql"
  4. _ "github.com/go-sql-driver/mysql"
  5. "fmt"
  6. "os"
  7. "strconv"
  8. "golang-fave/consts"
  9. "golang-fave/engine/wrapper"
  10. "golang-fave/utils"
  11. )
  12. func (this *Modules) RegisterModule_Index() *Module {
  13. return this.newModule(MInfo{
  14. WantDB: true,
  15. Mount: "index",
  16. Name: "Pages",
  17. Order: 0,
  18. }, func(wrap *wrapper.Wrapper) {
  19. // Front-end
  20. wrap.RenderFrontEnd("index", consts.TmplDataModIndex{
  21. MetaTitle: "Meta Title",
  22. MetaKeywords: "Meta Keywords",
  23. MetaDescription: "Meta Description",
  24. MainMenuItems: []consts.TmplDataMainMenuItem{
  25. {Name: "Home", Link: "/", Active: true},
  26. {Name: "Item 1", Link: "/#1", Active: false},
  27. {Name: "Item 2", Link: "/#2", Active: false},
  28. {Name: "Item 3", Link: "/#3", Active: false},
  29. },
  30. })
  31. }, func(wrap *wrapper.Wrapper) (string, string, string) {
  32. // Back-end
  33. return "1", "Index", "Index Sidebar"
  34. })
  35. }
  36. func (this *Modules) RegisterAction_MysqlSetup() *Action {
  37. return this.newAction(AInfo{
  38. WantDB: false,
  39. Mount: "mysql",
  40. }, func(wrap *wrapper.Wrapper) {
  41. pf_host := wrap.R.FormValue("host")
  42. pf_port := wrap.R.FormValue("port")
  43. pf_name := wrap.R.FormValue("name")
  44. pf_user := wrap.R.FormValue("user")
  45. pf_password := wrap.R.FormValue("password")
  46. if pf_host == "" {
  47. wrap.MsgError(`Please specify host for MySQL connection`)
  48. return
  49. }
  50. if pf_port == "" {
  51. wrap.MsgError(`Please specify host port for MySQL connection`)
  52. return
  53. }
  54. if _, err := strconv.Atoi(pf_port); err != nil {
  55. wrap.MsgError(`MySQL host port must be integer number`)
  56. return
  57. }
  58. if pf_name == "" {
  59. wrap.MsgError(`Please specify MySQL database name`)
  60. return
  61. }
  62. if pf_user == "" {
  63. wrap.MsgError(`Please specify MySQL user`)
  64. return
  65. }
  66. // Try connect to mysql
  67. db, err := sql.Open("mysql", pf_user+":"+pf_password+"@tcp("+pf_host+":"+pf_port+")/"+pf_name)
  68. if err != nil {
  69. wrap.MsgError(err.Error())
  70. return
  71. }
  72. defer db.Close()
  73. err = db.Ping()
  74. if err != nil {
  75. wrap.MsgError(err.Error())
  76. return
  77. }
  78. // Try to install all tables
  79. _, err = db.Query(fmt.Sprintf(
  80. "CREATE TABLE `%s`.`users` (`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'AI', `first_name` VARCHAR(64) NOT NULL DEFAULT '' COMMENT 'User first name', `last_name` VARCHAR(64) NOT NULL DEFAULT '' COMMENT 'User last name', `email` VARCHAR(64) NOT NULL COMMENT 'User email', `password` VARCHAR(32) NOT NULL COMMENT 'User password (MD5)', PRIMARY KEY (`id`)) ENGINE = InnoDB;",
  81. pf_name))
  82. if err != nil {
  83. wrap.MsgError(err.Error())
  84. return
  85. }
  86. _, err = db.Query(fmt.Sprintf(
  87. "CREATE TABLE `%s`.`pages` (`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'AI', `user` int(11) NOT NULL COMMENT 'User id', `name` varchar(255) NOT NULL COMMENT 'Page name', `slug` varchar(255) NOT NULL COMMENT 'Page url part', `content` text NOT NULL COMMENT 'Page content', `meta_title` varchar(255) NOT NULL DEFAULT '' COMMENT 'Page meta title', `meta_keywords` varchar(255) NOT NULL DEFAULT '' COMMENT 'Page meta keywords', `meta_description` varchar(510) NOT NULL DEFAULT '' COMMENT 'Page meta description', `datetime` datetime NOT NULL COMMENT 'Creation date/time', `status` enum('draft','public','trash') NOT NULL COMMENT 'Page status', PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;",
  88. pf_name))
  89. if err != nil {
  90. wrap.MsgError(err.Error())
  91. return
  92. }
  93. // Save mysql config file
  94. err = utils.MySqlConfigWrite(wrap.DConfig+string(os.PathSeparator)+"mysql.json", pf_host, pf_port, pf_name, pf_user, pf_password)
  95. if err != nil {
  96. wrap.MsgError(err.Error())
  97. return
  98. }
  99. // Reload current page
  100. wrap.Write(`window.location.reload(false);`)
  101. })
  102. }
  103. func (this *Modules) RegisterAction_CpFirstUser() *Action {
  104. return this.newAction(AInfo{
  105. WantDB: true,
  106. Mount: "first-user",
  107. }, func(wrap *wrapper.Wrapper) {
  108. pf_first_name := wrap.R.FormValue("first_name")
  109. pf_last_name := wrap.R.FormValue("last_name")
  110. pf_email := wrap.R.FormValue("email")
  111. pf_password := wrap.R.FormValue("password")
  112. if pf_email == "" {
  113. wrap.MsgError(`Please specify user email`)
  114. return
  115. }
  116. if !utils.IsValidEmail(pf_email) {
  117. wrap.MsgError(`Please specify correct user email`)
  118. return
  119. }
  120. if pf_password == "" {
  121. wrap.MsgError(`Please specify user password`)
  122. return
  123. }
  124. _, err := wrap.DB.Query(
  125. "INSERT INTO `users` SET `first_name` = ?, `last_name` = ?, `email` = ?, `password` = MD5(?);",
  126. pf_first_name, pf_last_name, pf_email, pf_password)
  127. if err != nil {
  128. wrap.MsgError(err.Error())
  129. return
  130. }
  131. // Reload current page
  132. wrap.Write(`window.location.reload(false);`)
  133. })
  134. }
  135. func (this *Modules) RegisterAction_CpUserLogin() *Action {
  136. return this.newAction(AInfo{
  137. WantDB: true,
  138. Mount: "signin",
  139. }, func(wrap *wrapper.Wrapper) {
  140. pf_email := wrap.R.FormValue("email")
  141. pf_password := wrap.R.FormValue("password")
  142. if pf_email == "" {
  143. wrap.MsgError(`Please specify user email`)
  144. return
  145. }
  146. if !utils.IsValidEmail(pf_email) {
  147. wrap.MsgError(`Please specify correct user email`)
  148. return
  149. }
  150. if pf_password == "" {
  151. wrap.MsgError(`Please specify user password`)
  152. return
  153. }
  154. if wrap.S.GetInt("UserId", 0) > 0 {
  155. wrap.MsgError(`You already logined`)
  156. return
  157. }
  158. var user_id int
  159. err := wrap.DB.QueryRow(
  160. "SELECT `id` FROM `users` WHERE `email` = ? and `password` = MD5(?) LIMIT 1;",
  161. pf_email, pf_password).Scan(&user_id)
  162. if err != nil && err != sql.ErrNoRows {
  163. wrap.MsgError(err.Error())
  164. return
  165. }
  166. if err == sql.ErrNoRows {
  167. wrap.MsgError(`Incorrect email or password`)
  168. return
  169. }
  170. // Save to current session
  171. wrap.S.SetInt("UserId", user_id)
  172. // Reload current page
  173. wrap.Write(`window.location.reload(false);`)
  174. })
  175. }
  176. func (this *Modules) RegisterAction_CpUserLogout() *Action {
  177. return this.newAction(AInfo{
  178. WantDB: true,
  179. Mount: "singout",
  180. WantUser: true,
  181. }, func(wrap *wrapper.Wrapper) {
  182. // Reset session var
  183. wrap.S.SetInt("UserId", 0)
  184. // Reload current page
  185. wrap.Write(`window.location.reload(false);`)
  186. })
  187. }
  188. func (this *Modules) RegisterAction_CpUserSettings() *Action {
  189. return this.newAction(AInfo{
  190. WantDB: true,
  191. Mount: "user-settings",
  192. WantUser: true,
  193. }, func(wrap *wrapper.Wrapper) {
  194. pf_first_name := wrap.R.FormValue("first_name")
  195. pf_last_name := wrap.R.FormValue("last_name")
  196. pf_email := wrap.R.FormValue("email")
  197. pf_password := wrap.R.FormValue("password")
  198. if pf_email == "" {
  199. wrap.MsgError(`Please specify user email`)
  200. return
  201. }
  202. if !utils.IsValidEmail(pf_email) {
  203. wrap.MsgError(`Please specify correct user email`)
  204. return
  205. }
  206. if pf_password != "" {
  207. // Update with password if set
  208. _, err := wrap.DB.Query(
  209. "UPDATE `users` SET `first_name` = ?, `last_name` = ?, `email` = ?, `password` = MD5(?) WHERE `id` = ?;",
  210. pf_first_name, pf_last_name, pf_email, pf_password, wrap.User.A_id)
  211. if err != nil {
  212. wrap.MsgError(err.Error())
  213. return
  214. }
  215. } else {
  216. // Update without password if not set
  217. _, err := wrap.DB.Query(
  218. "UPDATE `users` SET `first_name` = ?, `last_name` = ?, `email` = ? WHERE `id` = ?;",
  219. pf_first_name, pf_last_name, pf_email, wrap.User.A_id)
  220. if err != nil {
  221. wrap.MsgError(err.Error())
  222. return
  223. }
  224. }
  225. // Reload current page
  226. wrap.Write(`window.location.reload(false);`)
  227. })
  228. }