|
|
package user
|
|
|
|
|
|
import (
|
|
|
"database/sql"
|
|
|
"net/http"
|
|
|
"time"
|
|
|
|
|
|
"github.com/imdotdev/im.dev/server/pkg/db"
|
|
|
"github.com/imdotdev/im.dev/server/pkg/e"
|
|
|
"github.com/imdotdev/im.dev/server/pkg/models"
|
|
|
"github.com/imdotdev/im.dev/server/pkg/utils"
|
|
|
)
|
|
|
|
|
|
func GenSecret(userID string) (string, *e.Error) {
|
|
|
secret := utils.GenID(models.IDTypeSecret)
|
|
|
tx, err := db.Conn.Begin()
|
|
|
if err != nil {
|
|
|
logger.Warn("start transaction error", "error", err)
|
|
|
return "", e.New(http.StatusInternalServerError, e.Internal)
|
|
|
}
|
|
|
|
|
|
_, err = tx.Exec("DELETE FROM user_secret WHERE user_id=?", userID)
|
|
|
if err != nil {
|
|
|
logger.Warn("delete secret error", "error", err)
|
|
|
return "", e.New(http.StatusInternalServerError, e.Internal)
|
|
|
}
|
|
|
|
|
|
_, err = tx.Exec("INSERT INTO user_secret (user_id,secret,created) VALUES (?,?,?)", userID, secret, time.Now())
|
|
|
if err != nil {
|
|
|
logger.Warn("insert secret error", "error", err)
|
|
|
tx.Rollback()
|
|
|
return "", e.New(http.StatusInternalServerError, e.Internal)
|
|
|
}
|
|
|
|
|
|
tx.Commit()
|
|
|
return secret, nil
|
|
|
}
|
|
|
|
|
|
func GetSecret(userID string) (string, *e.Error) {
|
|
|
var secret string
|
|
|
err := db.Conn.QueryRow("SELECT secret from user_secret WHERE user_id=?", userID).Scan(&secret)
|
|
|
if err != nil {
|
|
|
if err == sql.ErrNoRows {
|
|
|
return "", e.New(http.StatusNotFound, "找不到对应的secret,请重新生成")
|
|
|
}
|
|
|
|
|
|
logger.Warn("select secret error", "error", err)
|
|
|
return "", e.New(http.StatusInternalServerError, e.Internal)
|
|
|
}
|
|
|
|
|
|
return secret, nil
|
|
|
}
|