module_index.go 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257
  1. package modules
  2. import (
  3. "database/sql"
  4. _ "github.com/go-sql-driver/mysql"
  5. "fmt"
  6. "net/http"
  7. "os"
  8. "strconv"
  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. }, func(wrap *wrapper.Wrapper) {
  18. // Front-end
  19. wrap.W.WriteHeader(http.StatusOK)
  20. wrap.W.Header().Set("Cache-Control", "no-cache, no-store, must-revalidate")
  21. wrap.W.Header().Set("Content-Type", "text/html; charset=utf-8")
  22. wrap.W.Write([]byte(`INDEX FrontEnd func call (` + wrap.CurrModule + `)`))
  23. }, func(wrap *wrapper.Wrapper) {
  24. // Back-end
  25. wrap.W.WriteHeader(http.StatusOK)
  26. wrap.W.Header().Set("Cache-Control", "no-cache, no-store, must-revalidate")
  27. wrap.W.Header().Set("Content-Type", "text/html; charset=utf-8")
  28. wrap.W.Write([]byte(`INDEX BackEnd func call (` + wrap.CurrModule + `)`))
  29. })
  30. }
  31. func (this *Modules) RegisterAction_MysqlSetup() *Action {
  32. return this.newAction(AInfo{
  33. WantDB: false,
  34. Mount: "mysql",
  35. }, func(wrap *wrapper.Wrapper) {
  36. pf_host := wrap.R.FormValue("host")
  37. pf_port := wrap.R.FormValue("port")
  38. pf_name := wrap.R.FormValue("name")
  39. pf_user := wrap.R.FormValue("user")
  40. pf_password := wrap.R.FormValue("password")
  41. if pf_host == "" {
  42. wrap.MsgError(`Please specify host for MySQL connection`)
  43. return
  44. }
  45. if pf_port == "" {
  46. wrap.MsgError(`Please specify host port for MySQL connection`)
  47. return
  48. }
  49. if _, err := strconv.Atoi(pf_port); err != nil {
  50. wrap.MsgError(`MySQL host port must be integer number`)
  51. return
  52. }
  53. if pf_name == "" {
  54. wrap.MsgError(`Please specify MySQL database name`)
  55. return
  56. }
  57. if pf_user == "" {
  58. wrap.MsgError(`Please specify MySQL user`)
  59. return
  60. }
  61. // Try connect to mysql
  62. db, err := sql.Open("mysql", pf_user+":"+pf_password+"@tcp("+pf_host+":"+pf_port+")/"+pf_name)
  63. if err != nil {
  64. wrap.MsgError(err.Error())
  65. return
  66. }
  67. defer db.Close()
  68. err = db.Ping()
  69. if err != nil {
  70. wrap.MsgError(err.Error())
  71. return
  72. }
  73. // Try to install all tables
  74. _, err = db.Query(fmt.Sprintf(
  75. "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;",
  76. pf_name))
  77. if err != nil {
  78. wrap.MsgError(err.Error())
  79. return
  80. }
  81. _, err = db.Query(fmt.Sprintf(
  82. "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;",
  83. pf_name))
  84. if err != nil {
  85. wrap.MsgError(err.Error())
  86. return
  87. }
  88. // Save mysql config file
  89. err = utils.MySqlConfigWrite(wrap.DConfig+string(os.PathSeparator)+"mysql.json", pf_host, pf_port, pf_name, pf_user, pf_password)
  90. if err != nil {
  91. wrap.MsgError(err.Error())
  92. return
  93. }
  94. // Reload current page
  95. wrap.Write(`window.location.reload(false);`)
  96. })
  97. }
  98. func (this *Modules) RegisterAction_CpFirstUser() *Action {
  99. return this.newAction(AInfo{
  100. WantDB: true,
  101. Mount: "first-user",
  102. }, func(wrap *wrapper.Wrapper) {
  103. pf_first_name := wrap.R.FormValue("first_name")
  104. pf_last_name := wrap.R.FormValue("last_name")
  105. pf_email := wrap.R.FormValue("email")
  106. pf_password := wrap.R.FormValue("password")
  107. if pf_email == "" {
  108. wrap.MsgError(`Please specify user email`)
  109. return
  110. }
  111. if !utils.IsValidEmail(pf_email) {
  112. wrap.MsgError(`Please specify correct user email`)
  113. return
  114. }
  115. if pf_password == "" {
  116. wrap.MsgError(`Please specify user password`)
  117. return
  118. }
  119. _, err := wrap.DB.Query(
  120. "INSERT INTO `users` SET `first_name` = ?, `last_name` = ?, `email` = ?, `password` = MD5(?);",
  121. pf_first_name, pf_last_name, pf_email, pf_password)
  122. if err != nil {
  123. wrap.MsgError(err.Error())
  124. return
  125. }
  126. // Reload current page
  127. wrap.Write(`window.location.reload(false);`)
  128. })
  129. }
  130. func (this *Modules) RegisterAction_CpUserLogin() *Action {
  131. return this.newAction(AInfo{
  132. WantDB: true,
  133. Mount: "signin",
  134. }, func(wrap *wrapper.Wrapper) {
  135. pf_email := wrap.R.FormValue("email")
  136. pf_password := wrap.R.FormValue("password")
  137. if pf_email == "" {
  138. wrap.MsgError(`Please specify user email`)
  139. return
  140. }
  141. if !utils.IsValidEmail(pf_email) {
  142. wrap.MsgError(`Please specify correct user email`)
  143. return
  144. }
  145. if pf_password == "" {
  146. wrap.MsgError(`Please specify user password`)
  147. return
  148. }
  149. if wrap.S.GetInt("UserId", 0) > 0 {
  150. wrap.MsgError(`You already logined`)
  151. return
  152. }
  153. var user_id int
  154. err := wrap.DB.QueryRow(
  155. "SELECT `id` FROM `users` WHERE `email` = ? and `password` = MD5(?) LIMIT 1;",
  156. pf_email, pf_password).Scan(&user_id)
  157. if err != nil && err != sql.ErrNoRows {
  158. wrap.MsgError(err.Error())
  159. return
  160. }
  161. if err == sql.ErrNoRows {
  162. wrap.MsgError(`Incorrect email or password`)
  163. return
  164. }
  165. // Save to current session
  166. wrap.S.SetInt("UserId", user_id)
  167. // Reload current page
  168. wrap.Write(`window.location.reload(false);`)
  169. })
  170. }
  171. func (this *Modules) RegisterAction_CpUserLogout() *Action {
  172. return this.newAction(AInfo{
  173. WantDB: true,
  174. Mount: "singout",
  175. WantUser: true,
  176. }, func(wrap *wrapper.Wrapper) {
  177. // Reset session var
  178. wrap.S.SetInt("UserId", 0)
  179. // Reload current page
  180. wrap.Write(`window.location.reload(false);`)
  181. })
  182. }
  183. func (this *Modules) RegisterAction_CpUserSettings() *Action {
  184. return this.newAction(AInfo{
  185. WantDB: true,
  186. Mount: "user-settings",
  187. WantUser: true,
  188. }, func(wrap *wrapper.Wrapper) {
  189. pf_first_name := wrap.R.FormValue("first_name")
  190. pf_last_name := wrap.R.FormValue("last_name")
  191. pf_email := wrap.R.FormValue("email")
  192. pf_password := wrap.R.FormValue("password")
  193. if pf_email == "" {
  194. wrap.MsgError(`Please specify user email`)
  195. return
  196. }
  197. if !utils.IsValidEmail(pf_email) {
  198. wrap.MsgError(`Please specify correct user email`)
  199. return
  200. }
  201. if pf_password != "" {
  202. // Update with password if set
  203. _, err := wrap.DB.Query(
  204. "UPDATE `users` SET `first_name` = ?, `last_name` = ?, `email` = ?, `password` = MD5(?) WHERE `id` = ?;",
  205. pf_first_name, pf_last_name, pf_email, pf_password, wrap.User.A_id)
  206. if err != nil {
  207. wrap.MsgError(err.Error())
  208. return
  209. }
  210. } else {
  211. // Update without password if not set
  212. _, err := wrap.DB.Query(
  213. "UPDATE `users` SET `first_name` = ?, `last_name` = ?, `email` = ? WHERE `id` = ?;",
  214. pf_first_name, pf_last_name, pf_email, wrap.User.A_id)
  215. if err != nil {
  216. wrap.MsgError(err.Error())
  217. return
  218. }
  219. }
  220. })
  221. }