123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176 |
- package model
- import (
- "crypto/md5"
- "database/sql"
- "errors"
- "fmt"
- "time"
- )
- type Accounts struct {
- Model
- }
- type AccountsRow struct {
- Id int64
- Account string
- Name string
- Password string
- LastLogin int64
- IsSuper bool
- Disabled bool
- }
- func NewAccounts(db *sql.DB) *Accounts {
- return &Accounts{Model{db: db}}
- }
- func PasswordConvert(pwd string) string {
- pwdMd5 := fmt.Sprintf("%x", md5.Sum([]byte(pwd)))
- return fmt.Sprintf("%x", md5.Sum([]byte(fmt.Sprintf("^redisdog|%s|pwd$", pwdMd5))))
- }
- func (m *Accounts) Insert(row *AccountsRow) (int64, error) {
- if row.Account == "" {
- return 0, errors.New("账号不能为空")
- }
- if len(row.Password) < 6 {
- return 0, errors.New("密码长度不能小于6")
- }
- disabledInt := 0
- if row.Disabled {
- disabledInt = 1
- }
- passwordEnc := PasswordConvert(row.Password)
- ret, err := m.db.Exec(`INSERT INTO accounts(account,name,password,is_super,disabled) VALUES(?,?,?,?,?)`, row.Account, row.Name, passwordEnc, row.IsSuper, disabledInt)
- if err != nil {
- return 0, nil
- }
- return ret.LastInsertId()
- }
- func (m *Accounts) Delete(id int64) (int64, error) {
- if id <= 0 {
- return 0, errors.New("ID必须是大于0的整数")
- }
- ret, err := m.db.Exec("DELETE FROM accounts WHERE id=?", id)
- if err != nil {
- return 0, err
- }
- return ret.RowsAffected()
- }
- func (m *Accounts) Update(row *AccountsRow) (int64, error) {
- if row.Id <= 0 {
- return 0, errors.New("ID必须是大于0的整数")
- }
- if row.Account == "" {
- return 0, errors.New("账号不能为空")
- }
- disabledInt := 0
- if row.Disabled {
- disabledInt = 1
- }
- ret, err := m.db.Exec(`UPDATE accounts SET account=?,name=?,is_super=?,disabled=? WHERE id=?`, row.Account, row.Name, row.IsSuper, disabledInt, row.Id)
- if err != nil {
- return 0, err
- }
- return ret.RowsAffected()
- }
- func (m *Accounts) UpdatePassword(id int64, password string) (int64, error) {
- if id <= 0 {
- return 0, errors.New("ID必须是大于0的整数")
- }
- if len(password) < 6 {
- return 0, errors.New("密码长度不能小于6")
- }
- passwordEnc := PasswordConvert(password)
- ret, err := m.db.Exec(`UPDATE accounts SET password=? WHERE id=?`, passwordEnc, id)
- if err != nil {
- return 0, err
- }
- return ret.RowsAffected()
- }
- func (m *Accounts) Get(id int64) (*AccountsRow, error) {
- if id <= 0 {
- return nil, errors.New("ID必须是大于0的整数")
- }
- result := m.db.QueryRow("SELECT id,account,name,last_login,is_super,disabled FROM accounts WHERE id=?", id)
- row := AccountsRow{}
- err := result.Scan(
- &row.Id,
- &row.Account,
- &row.Name,
- &row.LastLogin,
- &row.IsSuper,
- &row.Disabled,
- )
- if err != nil {
- if err == sql.ErrNoRows {
- return nil, errors.New("记录不存在")
- } else {
- return nil, err
- }
- } else {
- return &row, nil
- }
- }
- func (m *Accounts) GetAll() ([]*AccountsRow, error) {
- result, err := m.db.Query(`SELECT id,account,name,last_login,is_super,disabled FROM accounts ORDER BY id`)
- if err != nil {
- return nil, err
- }
- rows := make([]*AccountsRow, 0)
- for result.Next() {
- row := AccountsRow{}
- err = result.Scan(
- &row.Id,
- &row.Account,
- &row.Name,
- &row.LastLogin,
- &row.IsSuper,
- &row.Disabled,
- )
- if err != nil {
- continue
- }
- rows = append(rows, &row)
- }
- return rows, nil
- }
- func (m *Accounts) Login(account, password string) (*AccountsRow, error) {
- if account == "" {
- return nil, errors.New("账号不能为空")
- }
- if len(password) < 6 {
- return nil, errors.New("密码长度不能小于6")
- }
- passwordEnc := PasswordConvert(password)
- result := m.db.QueryRow("SELECT id,account,name,last_login,is_super,disabled FROM accounts WHERE account=? AND password=? LIMIT 1", account, passwordEnc)
- row := AccountsRow{}
- err := result.Scan(
- &row.Id,
- &row.Account,
- &row.Name,
- &row.LastLogin,
- &row.IsSuper,
- &row.Disabled,
- )
- if err != nil {
- if err == sql.ErrNoRows {
- return nil, errors.New("用户名或密码错误")
- } else {
- return nil, err
- }
- } else if row.Disabled {
- return nil, errors.New("账号已被禁用")
- } else {
- m.db.Exec("UPDATE last_login=? WHERE id=?", time.Now().Unix(), row.Id)
- return &row, nil
- }
- }
|