123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266 |
- package modules
- import (
- "database/sql"
- _ "github.com/go-sql-driver/mysql"
- "fmt"
- "net/http"
- "os"
- "strconv"
- "golang-fave/consts"
- "golang-fave/engine/wrapper"
- "golang-fave/utils"
- )
- func (this *Modules) RegisterModule_Index() *Module {
- return this.newModule(MInfo{
- WantDB: true,
- Mount: "index",
- Name: "Pages",
- }, func(wrap *wrapper.Wrapper) {
- // Front-end
- wrap.RenderFrontEnd("index", consts.TmplDataModIndex{
- MetaTitle: "Meta Title",
- MetaKeywords: "Meta Keywords",
- MetaDescription: "Meta Description",
- MainMenuItems: []consts.TmplDataMainMenuItem{
- {Name: "Home", Link: "/", Active: true},
- {Name: "Item 1", Link: "/#1", Active: false},
- {Name: "Item 2", Link: "/#2", Active: false},
- {Name: "Item 3", Link: "/#3", Active: false},
- },
- })
- }, func(wrap *wrapper.Wrapper) {
- // Back-end
- wrap.W.WriteHeader(http.StatusOK)
- wrap.W.Header().Set("Cache-Control", "no-cache, no-store, must-revalidate")
- wrap.W.Header().Set("Content-Type", "text/html; charset=utf-8")
- wrap.W.Write([]byte(`INDEX BackEnd func call (` + wrap.CurrModule + `)`))
- })
- }
- func (this *Modules) RegisterAction_MysqlSetup() *Action {
- return this.newAction(AInfo{
- WantDB: false,
- Mount: "mysql",
- }, func(wrap *wrapper.Wrapper) {
- pf_host := wrap.R.FormValue("host")
- pf_port := wrap.R.FormValue("port")
- pf_name := wrap.R.FormValue("name")
- pf_user := wrap.R.FormValue("user")
- pf_password := wrap.R.FormValue("password")
- if pf_host == "" {
- wrap.MsgError(`Please specify host for MySQL connection`)
- return
- }
- if pf_port == "" {
- wrap.MsgError(`Please specify host port for MySQL connection`)
- return
- }
- if _, err := strconv.Atoi(pf_port); err != nil {
- wrap.MsgError(`MySQL host port must be integer number`)
- return
- }
- if pf_name == "" {
- wrap.MsgError(`Please specify MySQL database name`)
- return
- }
- if pf_user == "" {
- wrap.MsgError(`Please specify MySQL user`)
- return
- }
- // Try connect to mysql
- db, err := sql.Open("mysql", pf_user+":"+pf_password+"@tcp("+pf_host+":"+pf_port+")/"+pf_name)
- if err != nil {
- wrap.MsgError(err.Error())
- return
- }
- defer db.Close()
- err = db.Ping()
- if err != nil {
- wrap.MsgError(err.Error())
- return
- }
- // Try to install all tables
- _, err = db.Query(fmt.Sprintf(
- "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;",
- pf_name))
- if err != nil {
- wrap.MsgError(err.Error())
- return
- }
- _, err = db.Query(fmt.Sprintf(
- "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;",
- pf_name))
- if err != nil {
- wrap.MsgError(err.Error())
- return
- }
- // Save mysql config file
- err = utils.MySqlConfigWrite(wrap.DConfig+string(os.PathSeparator)+"mysql.json", pf_host, pf_port, pf_name, pf_user, pf_password)
- if err != nil {
- wrap.MsgError(err.Error())
- return
- }
- // Reload current page
- wrap.Write(`window.location.reload(false);`)
- })
- }
- func (this *Modules) RegisterAction_CpFirstUser() *Action {
- return this.newAction(AInfo{
- WantDB: true,
- Mount: "first-user",
- }, func(wrap *wrapper.Wrapper) {
- pf_first_name := wrap.R.FormValue("first_name")
- pf_last_name := wrap.R.FormValue("last_name")
- pf_email := wrap.R.FormValue("email")
- pf_password := wrap.R.FormValue("password")
- if pf_email == "" {
- wrap.MsgError(`Please specify user email`)
- return
- }
- if !utils.IsValidEmail(pf_email) {
- wrap.MsgError(`Please specify correct user email`)
- return
- }
- if pf_password == "" {
- wrap.MsgError(`Please specify user password`)
- return
- }
- _, err := wrap.DB.Query(
- "INSERT INTO `users` SET `first_name` = ?, `last_name` = ?, `email` = ?, `password` = MD5(?);",
- pf_first_name, pf_last_name, pf_email, pf_password)
- if err != nil {
- wrap.MsgError(err.Error())
- return
- }
- // Reload current page
- wrap.Write(`window.location.reload(false);`)
- })
- }
- func (this *Modules) RegisterAction_CpUserLogin() *Action {
- return this.newAction(AInfo{
- WantDB: true,
- Mount: "signin",
- }, func(wrap *wrapper.Wrapper) {
- pf_email := wrap.R.FormValue("email")
- pf_password := wrap.R.FormValue("password")
- if pf_email == "" {
- wrap.MsgError(`Please specify user email`)
- return
- }
- if !utils.IsValidEmail(pf_email) {
- wrap.MsgError(`Please specify correct user email`)
- return
- }
- if pf_password == "" {
- wrap.MsgError(`Please specify user password`)
- return
- }
- if wrap.S.GetInt("UserId", 0) > 0 {
- wrap.MsgError(`You already logined`)
- return
- }
- var user_id int
- err := wrap.DB.QueryRow(
- "SELECT `id` FROM `users` WHERE `email` = ? and `password` = MD5(?) LIMIT 1;",
- pf_email, pf_password).Scan(&user_id)
- if err != nil && err != sql.ErrNoRows {
- wrap.MsgError(err.Error())
- return
- }
- if err == sql.ErrNoRows {
- wrap.MsgError(`Incorrect email or password`)
- return
- }
- // Save to current session
- wrap.S.SetInt("UserId", user_id)
- // Reload current page
- wrap.Write(`window.location.reload(false);`)
- })
- }
- func (this *Modules) RegisterAction_CpUserLogout() *Action {
- return this.newAction(AInfo{
- WantDB: true,
- Mount: "singout",
- WantUser: true,
- }, func(wrap *wrapper.Wrapper) {
- // Reset session var
- wrap.S.SetInt("UserId", 0)
- // Reload current page
- wrap.Write(`window.location.reload(false);`)
- })
- }
- func (this *Modules) RegisterAction_CpUserSettings() *Action {
- return this.newAction(AInfo{
- WantDB: true,
- Mount: "user-settings",
- WantUser: true,
- }, func(wrap *wrapper.Wrapper) {
- pf_first_name := wrap.R.FormValue("first_name")
- pf_last_name := wrap.R.FormValue("last_name")
- pf_email := wrap.R.FormValue("email")
- pf_password := wrap.R.FormValue("password")
- if pf_email == "" {
- wrap.MsgError(`Please specify user email`)
- return
- }
- if !utils.IsValidEmail(pf_email) {
- wrap.MsgError(`Please specify correct user email`)
- return
- }
- if pf_password != "" {
- // Update with password if set
- _, err := wrap.DB.Query(
- "UPDATE `users` SET `first_name` = ?, `last_name` = ?, `email` = ?, `password` = MD5(?) WHERE `id` = ?;",
- pf_first_name, pf_last_name, pf_email, pf_password, wrap.User.A_id)
- if err != nil {
- wrap.MsgError(err.Error())
- return
- }
- } else {
- // Update without password if not set
- _, err := wrap.DB.Query(
- "UPDATE `users` SET `first_name` = ?, `last_name` = ?, `email` = ? WHERE `id` = ?;",
- pf_first_name, pf_last_name, pf_email, wrap.User.A_id)
- if err != nil {
- wrap.MsgError(err.Error())
- return
- }
- }
- })
- }
|