package controllers import ( "intent-system/pkg/dal/models" "intent-system/pkg/itypes" "intent-system/pkg/middleware" "intent-system/pkg/privilege" "intent-system/pkg/proto" "intent-system/pkg/sessions" "intent-system/pkg/utils" "github.com/civet148/log" "github.com/gin-gonic/gin" ) func (m *Controller) PlatformLogin(c *gin.Context) { //user login var err error var req proto.PlatformLoginReq var ctx *itypes.Context if err = m.bindJSON(c, &req); err != nil { log.Errorf("%s", err) return } var do *models.UserDO var strIP = m.GetClientIP(c) var code itypes.BizCode if do, code = m.PlatformCore.UserLogin(req.UserName, req.Password, strIP); !code.Ok() { m.Error(c, code) return } s := &itypes.Session{ UserId: do.GetId(), UserName: do.GetUserName(), Alias: do.GetUserAlias(), PhoneNumber: do.GetPhoneNumber(), IsAdmin: do.GetIsAdmin(), Email: do.GetEmail(), LoginIP: strIP, } if s.AuthToken, err = middleware.GenerateToken(s); err != nil { err = log.Errorf("generate token error [%s]", err.Error()) m.Error(c, itypes.NewBizCode(itypes.CODE_INVALID_PARAMS, err.Error())) return } ctx = sessions.NewContext(s) log.Debugf("user [%v] login successful, user id [%v] is admin [%v] token [%s]", s.UserName, s.UserId, s.IsAdmin, s.AuthToken) role := m.PlatformCore.GetUserRole(ctx, do.GetUserName()) if role == nil { err = log.Errorf("user [%s] role not found", req.UserName) m.Error(c, itypes.NewBizCode(itypes.CODE_NOT_FOUND, err.Error())) return } privileges := m.PlatformCore.GetUserRoleList(do.UserName) var resp = proto.PlatformLoginResp{ Id: do.Id, Version: m.cfg.Version, UserName: do.UserName, AuthToken: s.AuthToken, LoginTime: do.LoginTime, LoginIp: do.LoginIp, Role: role.RoleName, Privilege: privileges, } m.OK(c, &resp, 1, 1) } func (m *Controller) PlatformLogout(c *gin.Context) { //user logout sessions.RemoveContext(c) m.OK(c, nil, 0, 0) } func (m *Controller) PlatformCheckExist(c *gin.Context) { //check user account or email exist var err error var req proto.PlatformCheckExistReq if err = m.bindJSON(c, &req); err != nil { log.Errorf(err.Error()) return } ctx, ok := m.ContextPlatformPrivilege(c, privilege.Null) if !ok { log.Errorf("user authentication context is nil or privilege check failed") return } code := m.PlatformCore.CheckExist(ctx, &req) if !code.Ok() { m.Error(c, code) return } m.OK(c, &proto.PlatformCheckExistResp{}, 1, 1) } func (m *Controller) PlatformListUser(c *gin.Context) { //list platform users var err error var req proto.PlatformListUserReq if err = m.bindJSON(c, &req); err != nil { log.Errorf(err.Error()) return } ctx, ok := m.ContextPlatformPrivilege(c, privilege.UserAccess) if !ok { log.Errorf("user authentication context is nil or privilege check failed") return } users, total, code := m.PlatformCore.ListUser(ctx, &req) if !code.Ok() { log.Errorf("list user code [%s]", code.String()) m.Error(c, code) return } m.OK(c, proto.PlatformListUserResp{Users: users}, len(users), total) } func (m *Controller) PlatformCreateUser(c *gin.Context) { //create user account var err error var req proto.PlatformCreateUserReq if err = m.bindJSON(c, &req); err != nil { log.Errorf(err.Error()) return } ctx, ok := m.ContextPlatformPrivilege(c, privilege.UserAdd) if !ok { log.Errorf("user authentication context is nil or privilege check failed") return } if code := m.PlatformCore.CheckUserNameExist(ctx, req.UserName); !code.Ok() { m.Error(c, code) return } if req.Email != "" { if code := m.PlatformCore.CheckUserEmailExist(ctx, req.Email); !code.Ok() { m.Error(c, code) return } if !utils.VerifyEmailFormat(req.Email) { err = log.Errorf("email [%s] format error", req.Email) m.Error(c, itypes.NewBizCode(itypes.CODE_INVALID_PARAMS, err.Error())) return } } user, code := m.PlatformCore.CreateUser(ctx, &req) if !code.Ok() { m.Error(c, code) return } var resp = proto.PlatformCreateUserResp{ UserId: user.GetId(), } m.OK(c, &resp, 1, 1) } func (m *Controller) PlatformEditUser(c *gin.Context) { //edit user information var err error var req proto.PlatformEditUserReq if err = m.bindJSON(c, &req); err != nil { log.Errorf(err.Error()) return } ctx, ok := m.ContextPlatformPrivilege(c, privilege.UserEdit) if !ok { log.Errorf("user authentication context is nil or privilege check failed") return } var code itypes.BizCode if code = m.PlatformCore.EditUser(ctx, &req); !code.Ok() { m.Error(c, code) return } m.OK(c, &proto.PlatformEditUserResp{}, 1, 1) } func (m *Controller) PlatformEnableUser(c *gin.Context) { var err error var req proto.PlatformEnableUserReq if err = m.bindJSON(c, &req); err != nil { log.Errorf(err.Error()) return } ctx, ok := m.ContextPlatformPrivilege(c, privilege.UserEdit) if !ok { log.Errorf("user authentication context is nil or privilege check failed") return } r, code := m.PlatformCore.EnableUser(ctx, &req) if !code.Ok() { log.Warnf("name [%s] id [%v] operator user failed", ctx.UserName(), ctx.UserId()) m.Error(c, code) return } m.OK(c, r, 1, 1) } func (m *Controller) PlatformDisableUser(c *gin.Context) { var err error var req proto.PlatformDisableUserReq if err = m.bindJSON(c, &req); err != nil { log.Errorf(err.Error()) return } ctx, ok := m.ContextPlatformPrivilege(c, privilege.UserEdit) if !ok { log.Errorf("user authentication context is nil or privilege check failed") return } r, code := m.PlatformCore.DisableUser(ctx, &req) if !code.Ok() { log.Warnf("name [%s] id [%v] operator user failed", ctx.UserName(), ctx.UserId()) m.Error(c, code) return } m.OK(c, r, 1, 1) } func (m *Controller) PlatformDeleteUser(c *gin.Context) { //delete user account var err error var req proto.PlatformDeleteUserReq if err = m.bindJSON(c, &req); err != nil { log.Errorf(err.Error()) return } ctx, ok := m.ContextPlatformPrivilege(c, privilege.UserDelete) if !ok { log.Errorf("user authentication context is nil or privilege check failed") return } if req.UserName == ctx.UserName() { err = log.Errorf("can't delete self") m.Error(c, itypes.NewBizCode(itypes.CODE_ACCESS_DENY, err.Error())) return } if code := m.PlatformCore.DeleteUser(ctx, &req); !code.Ok() { log.Warnf("operator name [%s] id [%v] delete user failed", ctx.UserName(), ctx.UserId()) m.Error(c, code) return } m.OK(c, &proto.PlatformDeleteUserResp{}, 1, 1) } func (m *Controller) PlatformDeleteUsers(c *gin.Context) { //delete user account var err error var req proto.PlatformDeleteUsersReq if err = m.bindJSON(c, &req); err != nil { log.Errorf(err.Error()) return } ctx, ok := m.ContextPlatformPrivilege(c, privilege.UserDelete) if !ok { log.Errorf("user authentication context is nil or privilege check failed") return } if code := m.PlatformCore.DeleteUsers(ctx, &req); !code.Ok() { log.Warnf("operator name [%s] id [%v] delete user failed", ctx.UserName(), ctx.UserId()) m.Error(c, code) return } m.OK(c, &proto.PlatformDeleteUsersResp{}, 1, 1) } func (m *Controller) PlatformListRole(c *gin.Context) { //list platform roles var err error var req proto.PlatformListRoleReq if err = m.bindJSON(c, &req); err != nil { log.Errorf(err.Error()) return } ctx, ok := m.ContextPlatformPrivilege(c, privilege.RoleAccess) if !ok { log.Errorf("user authentication context is nil or privilege check failed") return } roles, total, code := m.PlatformCore.ListRole(ctx, &req) if !code.Ok() { m.Error(c, code) return } count := len(roles) m.OK(c, &proto.PlatformListRoleResp{Roles: roles}, count, total) } func (m *Controller) PlatformCreateRole(c *gin.Context) { //create a custom platform role var err error var req proto.PlatformCreateRoleReq if err = m.bindJSON(c, &req); err != nil { log.Errorf(err.Error()) return } ctx, ok := m.ContextPlatformPrivilege(c, privilege.RoleAdd) if !ok { log.Errorf("user authentication context is nil or privilege check failed") return } if code := m.PlatformCore.CreateRole(ctx, &req); !code.Ok() { m.Error(c, code) return } m.OK(c, &proto.PlatformCreateRoleResp{}, 1, 1) } func (m *Controller) PlatformEditRole(c *gin.Context) { //edit custom platform role var err error var req proto.PlatformEditRoleReq if err = m.bindJSON(c, &req); err != nil { log.Errorf(err.Error()) return } ctx, ok := m.ContextPlatformPrivilege(c, privilege.RoleEdit) if !ok { log.Errorf("user authentication context is nil or privilege check failed") return } if code := m.PlatformCore.EditRole(ctx, &req); !code.Ok() { m.Error(c, code) return } m.OK(c, &proto.PlatformEditRoleResp{}, 1, 1) } func (m *Controller) PlatformDeleteRole(c *gin.Context) { //delete custom platform role var err error var req proto.PlatformDeleteRoleReq if err = m.bindJSON(c, &req); err != nil { log.Errorf(err.Error()) return } ctx, ok := m.ContextPlatformPrivilege(c, privilege.RoleDelete) if !ok { log.Errorf("user authentication context is nil or privilege check failed") return } if code := m.PlatformCore.DeleteRole(ctx, &req); !code.Ok() { m.Error(c, code) return } m.OK(c, &proto.PlatformDeleteRoleResp{}, 1, 1) } // 权限授权 func (m *Controller) PlatformAuthRole(c *gin.Context) { var err error var req proto.PlatformAuthRoleReq if err = m.bindJSON(c, &req); err != nil { log.Errorf(err.Error()) return } ctx, ok := m.ContextPlatformPrivilege(c, privilege.RoleAuthority) if !ok { log.Errorf("user authentication context is nil or privilege check failed") return } if code := m.PlatformCore.AuthRole(ctx, &req); !code.Ok() { m.Error(c, code) return } m.OK(c, &proto.PlatformAuthRoleResp{}, 1, 1) } func (m *Controller) PlatformInquireAuth(c *gin.Context) { var err error var req proto.PlatformInquireAuthReq if err = m.bindJSON(c, &req); err != nil { log.Errorf(err.Error()) return } ctx, ok := m.ContextPlatformPrivilege(c, privilege.RoleAccess) if !ok { log.Errorf("user authentication context is nil or privilege check failed") return } authority, code := m.PlatformCore.InquireAuth(ctx, &req) if !code.Ok() { m.Error(c, code) return } m.OK(c, &proto.PlatformInquireAuthResp{Privilege: authority}, 1, 1) } func (m *Controller) PlatformPrivilegeTree(c *gin.Context) { var err error var req proto.PlatformPrivilegeTreeReq if err = m.bindJSON(c, &req); err != nil { log.Errorf(err.Error()) return } ctx, ok := m.ContextPlatformPrivilege(c, privilege.RoleAccess) if !ok { log.Errorf("user authentication context is nil or privilege check failed") return } PlatformPrivilegeTreeResp, code := m.PlatformCore.PrivilegeTree(ctx, &req) if !code.Ok() { log.Errorf("list device type code [%s]", code) m.Error(c, code) return } m.OK(c, PlatformPrivilegeTreeResp, 1, 1) } func (m *Controller) PlatformResetPassword(c *gin.Context) { //platform administrator reset other user's password var err error var req proto.PlatformResetPasswordReq if err = m.bindJSON(c, &req); err != nil { log.Errorf(err.Error()) return } ctx, ok := m.ContextPlatformPrivilege(c, privilege.UserEdit) if !ok { log.Errorf("user authentication context is nil or privilege check failed") return } if code := m.PlatformCore.ResetUserPassword(ctx, &req); !code.Ok() { m.Error(c, code) return } m.OK(c, &proto.PlatformResetPasswordResp{}, 1, 1) } func (m *Controller) PlatformChangePassword(c *gin.Context) { //platform user change password by self var err error var req proto.PlatformResetPasswordReq if err = m.bindJSON(c, &req); err != nil { log.Errorf(err.Error()) return } ctx, ok := m.ContextPlatformPrivilege(c, privilege.Null) if !ok { log.Errorf("user authentication context is nil or privilege check failed") return } if m.isNilString(req.OldPassword) { err = log.Errorf("request body [%+v] old password is nil or ", req) m.Error(c, itypes.NewBizCode(itypes.CODE_INVALID_PARAMS, err.Error())) return } ok, code := m.PlatformCore.CheckUserPassword(ctx, ctx.UserName(), req.OldPassword) if !ok { if code.Ok() { m.Error(c, code) return } log.Error("user [%s] old password [%s] not match when change password by self", ctx.UserName(), req.OldPassword) m.Error(c, itypes.NewBizCode(itypes.CODE_INVALID_PASSWORD)) return } req.UserName = ctx.UserName() //user change password by self (so the user name must be self name) if code = m.PlatformCore.ResetUserPassword(ctx, &req); !code.Ok() { m.Error(c, code) return } m.OK(c, &proto.PlatformResetPasswordResp{}, 1, 1) } func (m *Controller) PlatformListRoleUser(c *gin.Context) { //list role user var err error var req proto.PlatformListRoleUserReq if err = m.bindJSON(c, &req); err != nil { log.Errorf(err.Error()) return } ctx, ok := m.ContextPlatformPrivilege(c, privilege.RoleAccess) if !ok { log.Errorf("user authentication context is nil or privilege check failed") return } users, total, code := m.PlatformCore.ListRoleUser(ctx, &req) if !code.Ok() { m.Error(c, code) return } userCount := len(users) m.OK(c, &proto.PlatformListRoleUserResp{ RoleName: req.RoleName, UserCount: userCount, Users: users, }, userCount, total) } func (m *Controller) PlatformRefreshAuthToken(c *gin.Context) { var err error var req proto.PlatformRefreshAuthTokenReq if err = c.BindJSON(&req); err != nil { log.Errorf("%s", err) return } ctx, ok := m.ContextPlatformPrivilege(c, privilege.Null) if !ok { log.Errorf("user authentication context is nil or privilege check failed") return } var IP = m.GetClientIP(c) s := &itypes.Session{ UserId: ctx.UserId(), UserName: ctx.UserName(), Alias: ctx.Alias(), PhoneNumber: ctx.PhoneNumber(), IsAdmin: ctx.IsAdmin(), Email: ctx.GetEmail(), LoginIP: IP, } if s.AuthToken, err = middleware.GenerateToken(s); err != nil { err = log.Errorf("generate token error [%s]", err.Error()) m.Error(c, itypes.NewBizCode(itypes.CODE_ERROR, err.Error())) return } _ = sessions.NewContext(s) var resp = proto.PlatformRefreshAuthTokenResp{ AuthToken: s.AuthToken, } m.OK(c, &resp, 1, 1) } func (m *Controller) PlatformListOperLog(c *gin.Context) { var err error var req proto.PlatformListOperLogReq if err = m.bindJSON(c, &req); err != nil { log.Errorf(err.Error()) return } ctx, ok := m.ContextPlatformPrivilege(c, privilege.Null) if !ok { log.Errorf("user authentication context is nil or privilege check failed") return } list, total, code := m.PlatformCore.ListOperLog(ctx, &req) if !code.Ok() { m.Error(c, code) return } count := len(list) m.OK(c, &proto.PlatformListOperLogResp{ List: list, }, count, total) } // 上传图片 func (m *Controller) PlatformUploadFile(c *gin.Context) { resp, code := m.PlatformCore.UploadFile(c) if !code.Ok() { m.Error(c, code) return } m.OK(c, resp, 1, 1) }