user.go 2.86 KB
package models

import (
	"crypto/md5"
	"encoding/hex"
	"errors"
	"log"
	db "loginserver/database"
)

type UserLoginInfo struct {
	Type     string
	Name     string
	Password string
}

type UserRegisterInfo struct {
	Type     string
	Name     string
	Password string
}

func (u *UserLoginInfo) UserLogin() (result interface{}, err error) {
	switch u.Type {
	case "normal":
		password, err := GetPasswordByUserName(u.Name)
		if err != nil {
			return password, err
		}
		if password != MD5(u.Password) {
			err = errors.New("密码错误")
			return "105004", err
		}
		break
	default:
		err = errors.New("不存在的登陆类型")
		return "105000", err
	}
	log.Println(u.Name, " login success")
	return nil, nil
}

func (u *UserRegisterInfo) UserRegister() (result interface{}, err error) {
	switch u.Type {
	case "account": //账号密码注册
		res, err := CheckUserNameRepeat(u.Name)
		if err != nil {
			return res, err
		}
		errno, err := InsertUser(u.Name, u.Password)
		if err != nil {
			return errno, err
		}
		break
	default:
		err = errors.New("不存在的注册类型")
		return "105001", err
		break
	}
	log.Println(u.Name, " register success")
	return nil, nil
}

//检查用户名是否重复
func CheckUserNameRepeat(userName string) (result interface{}, err error) {
	sql := ` select user_password from icesimba_polysdk_user where user_name = ?`
	r, err := db.Engine.Query(sql, userName)
	if err != nil {
		return "104001", err
	}
	if len(r) == 0 {
		return false, nil
	}
	return true, nil

}

//获取用户密码
func GetPasswordByUserName(userName string) (result interface{}, err error) {
	sql := ` select user_password from icesimba_polysdk_user where  user_name = ?`
	r, err := db.Engine.Query(sql, userName)
	if err != nil {
		return "104001", err
	}
	if len(r) == 0 {
		err = errors.New("不存在的用户名")
		return "105003", err
	}
	return string(r[0]["user_password"]), nil

}

//修改用户密码
func ChangeUserPassword(userName string, originPassword string, newPassword string) (result interface{}, err error) {
	r, err := GetPasswordByUserName(userName)
	if err != nil {
		return r, err
	}
	if MD5(newPassword) == originPassword {
		err = errors.New("新旧密码一致!无法修改")
		return "105002", err
	}
	password := MD5(newPassword)
	sql := ` update icesimba_polysdk_user set user_password = ? where user_name = ?`
	_, err = db.Engine.Exec(sql, password, userName)
	if err != nil {
		return "104001", err
	}
	return
}

//添加用户
func InsertUser(userName string, userPassword string) (result interface{}, err error) {
	password := MD5(userPassword)
	sql := ` insert into icesimba_polysdk_user(user_name,user_password) values(?,?) `
	_, err = db.Engine.Exec(sql, userName, password)
	if err != nil {
		return "104001", err
	}
	return nil, nil

}

func MD5(str string) string {
	w := md5.New()
	w.Write([]byte(str))
	has := w.Sum(nil)
	str = hex.EncodeToString(has)
	return str
}