Skip to content

Commit 88aae2f

Browse files
chore: Remove legacy /settings and /login
1 parent 890136a commit 88aae2f

15 files changed

Lines changed: 260 additions & 781 deletions

File tree

api/users.go

Lines changed: 0 additions & 293 deletions
Original file line numberDiff line numberDiff line change
@@ -23,16 +23,6 @@ import (
2323
func configGinUsersRouter(router *gin.Engine, daoWrapper dao.DaoWrapper) {
2424
routes := usersRoutes{daoWrapper}
2525

26-
router.POST("/api/users/settings/name", routes.updatePreferredName)
27-
router.POST("/api/users/settings/greeting", routes.updatePreferredGreeting)
28-
router.POST("/api/users/settings/playbackSpeeds", routes.updatePlaybackSpeeds)
29-
router.POST("/api/users/settings/seekingTime", routes.updateSeekingTime)
30-
router.POST("/api/users/settings/customSpeeds", routes.updateCustomSpeeds)
31-
router.POST("/api/users/settings/autoSkip", routes.updateAutoSkip)
32-
router.POST("api/users/settings/lectureView", routes.updatePreferredView)
33-
34-
router.POST("/api/users/resetPassword", routes.resetPassword)
35-
3626
courses := router.Group("/api/users/courses")
3727
{
3828
courses.GET("/:id/pin", routes.getPinForCourse)
@@ -556,249 +546,6 @@ func (r usersRoutes) forgotPassword(email string) {
556546
}
557547
}
558548

559-
type userSettingsRequest struct {
560-
Value string `json:"value"`
561-
}
562-
563-
func (r usersRoutes) updatePreferredName(c *gin.Context) {
564-
u := c.MustGet("TUMLiveContext").(tools.TUMLiveContext).User
565-
if u == nil {
566-
_ = c.Error(tools.RequestError{
567-
Status: http.StatusUnauthorized,
568-
CustomMessage: "login required",
569-
})
570-
return
571-
}
572-
var request userSettingsRequest
573-
err := json.NewDecoder(c.Request.Body).Decode(&request)
574-
if err != nil {
575-
_ = c.Error(tools.RequestError{
576-
Status: http.StatusBadRequest,
577-
CustomMessage: "can not bind body",
578-
Err: err,
579-
})
580-
return
581-
}
582-
for _, s := range u.Settings {
583-
if s.Type == model.PreferredName && time.Since(s.UpdatedAt) < time.Hour*24*30*3 {
584-
_ = c.Error(tools.RequestError{
585-
Status: http.StatusUnauthorized,
586-
CustomMessage: "preferred name already set within the last 3 months",
587-
})
588-
return
589-
}
590-
}
591-
if len(request.Value) > 80 {
592-
_ = c.Error(tools.RequestError{
593-
Status: http.StatusBadRequest,
594-
CustomMessage: "preferred name too long",
595-
})
596-
return
597-
}
598-
err = r.UsersDao.AddUserSetting(&model.UserSetting{
599-
UserID: u.ID,
600-
Type: model.PreferredName,
601-
Value: request.Value,
602-
})
603-
if err != nil {
604-
_ = c.Error(tools.RequestError{
605-
Status: http.StatusInternalServerError,
606-
CustomMessage: "can not add user setting",
607-
Err: err,
608-
})
609-
return
610-
}
611-
}
612-
613-
func getUserFromContext(c *gin.Context) *model.User {
614-
u := c.MustGet("TUMLiveContext").(tools.TUMLiveContext).User
615-
if u == nil {
616-
_ = c.Error(tools.RequestError{
617-
Status: http.StatusUnauthorized,
618-
CustomMessage: "login required",
619-
})
620-
return nil
621-
}
622-
return u
623-
}
624-
625-
func getRequestFromContext(c *gin.Context) *userSettingsRequest {
626-
var request userSettingsRequest
627-
err := json.NewDecoder(c.Request.Body).Decode(&request)
628-
if err != nil {
629-
_ = c.Error(tools.RequestError{
630-
Status: http.StatusBadRequest,
631-
CustomMessage: "can not bind body",
632-
Err: err,
633-
})
634-
return nil
635-
}
636-
return &request
637-
}
638-
639-
func (r usersRoutes) updatePreferredGreeting(c *gin.Context) {
640-
u := getUserFromContext(c)
641-
request := getRequestFromContext(c)
642-
643-
err := r.UsersDao.AddUserSetting(&model.UserSetting{
644-
UserID: u.ID,
645-
Type: model.Greeting,
646-
Value: request.Value,
647-
})
648-
if err != nil {
649-
_ = c.Error(tools.RequestError{
650-
Status: http.StatusInternalServerError,
651-
CustomMessage: "can not add user setting",
652-
Err: err,
653-
})
654-
return
655-
}
656-
}
657-
658-
func (r usersRoutes) updateCustomSpeeds(c *gin.Context) {
659-
u := c.MustGet("TUMLiveContext").(tools.TUMLiveContext).User
660-
if u == nil {
661-
_ = c.Error(tools.RequestError{
662-
Status: http.StatusUnauthorized,
663-
CustomMessage: "login required",
664-
})
665-
return
666-
}
667-
668-
var req struct{ Value []float32 }
669-
if err := c.BindJSON(&req); err != nil {
670-
_ = c.Error(tools.RequestError{
671-
Status: http.StatusBadRequest,
672-
CustomMessage: "can not bind body",
673-
Err: err,
674-
})
675-
return
676-
}
677-
settingsString := "[]"
678-
if len(req.Value) != 0 {
679-
settingBytes, _ := json.Marshal(req.Value)
680-
settingsString = string(settingBytes)
681-
}
682-
err := r.DaoWrapper.AddUserSetting(&model.UserSetting{UserID: u.ID, Type: model.UserDefinedSpeeds, Value: settingsString})
683-
if err != nil {
684-
_ = c.Error(tools.RequestError{
685-
Status: http.StatusInternalServerError,
686-
CustomMessage: "can not add user setting",
687-
Err: err,
688-
})
689-
return
690-
}
691-
}
692-
693-
func (r usersRoutes) updatePlaybackSpeeds(c *gin.Context) {
694-
u := c.MustGet("TUMLiveContext").(tools.TUMLiveContext).User
695-
if u == nil {
696-
_ = c.Error(tools.RequestError{
697-
Status: http.StatusUnauthorized,
698-
CustomMessage: "login required for updating user settings",
699-
})
700-
return
701-
}
702-
var req struct{ Value []model.PlaybackSpeedSetting }
703-
if err := c.BindJSON(&req); err != nil {
704-
_ = c.Error(tools.RequestError{
705-
Status: http.StatusBadRequest,
706-
CustomMessage: "can not bind body to request",
707-
Err: err,
708-
})
709-
return
710-
}
711-
if len(req.Value) == 0 {
712-
_ = c.Error(tools.RequestError{
713-
Status: http.StatusBadRequest,
714-
CustomMessage: "invalid value (value < 1)",
715-
})
716-
return
717-
}
718-
settingBytes, _ := json.Marshal(req.Value)
719-
err := r.DaoWrapper.UsersDao.AddUserSetting(&model.UserSetting{UserID: u.ID, Type: model.CustomPlaybackSpeeds, Value: string(settingBytes)})
720-
if err != nil {
721-
_ = c.Error(tools.RequestError{
722-
Status: http.StatusInternalServerError,
723-
CustomMessage: "can not add user setting",
724-
Err: err,
725-
})
726-
return
727-
}
728-
}
729-
730-
func (r usersRoutes) updateSeekingTime(c *gin.Context) {
731-
u := getUserFromContext(c)
732-
request := getRequestFromContext(c)
733-
734-
// Add the user's seeking time setting to the database.
735-
err := r.UsersDao.AddUserSetting(&model.UserSetting{
736-
UserID: u.ID,
737-
Type: model.SeekingTime,
738-
Value: request.Value,
739-
})
740-
// Handle errors that may occur during the database operation.
741-
if err != nil {
742-
_ = c.Error(tools.RequestError{
743-
Status: http.StatusInternalServerError,
744-
CustomMessage: "can not add user setting",
745-
Err: err,
746-
})
747-
return
748-
}
749-
}
750-
751-
func (r usersRoutes) updateAutoSkip(c *gin.Context) {
752-
u := c.MustGet("TUMLiveContext").(tools.TUMLiveContext).User
753-
if u == nil {
754-
_ = c.Error(tools.RequestError{
755-
Status: http.StatusUnauthorized,
756-
CustomMessage: "login required for updating user settings",
757-
})
758-
return
759-
}
760-
761-
var req struct{ Value model.AutoSkipSetting }
762-
if err := c.BindJSON(&req); err != nil {
763-
_ = c.Error(tools.RequestError{
764-
Status: http.StatusBadRequest,
765-
CustomMessage: "can not bind body to request",
766-
Err: err,
767-
})
768-
return
769-
}
770-
771-
settingBytes, _ := json.Marshal(req.Value)
772-
err := r.DaoWrapper.UsersDao.AddUserSetting(&model.UserSetting{UserID: u.ID, Type: model.AutoSkip, Value: string(settingBytes)})
773-
if err != nil {
774-
_ = c.Error(tools.RequestError{
775-
Status: http.StatusInternalServerError,
776-
CustomMessage: "can not add user setting",
777-
Err: err,
778-
})
779-
return
780-
}
781-
}
782-
783-
func (r usersRoutes) updatePreferredView(c *gin.Context) {
784-
u := getUserFromContext(c)
785-
request := getRequestFromContext(c)
786-
787-
err := r.UsersDao.AddUserSetting(&model.UserSetting{
788-
UserID: u.ID,
789-
Type: model.LectureView,
790-
Value: request.Value,
791-
})
792-
if err != nil {
793-
_ = c.Error(tools.RequestError{
794-
Status: http.StatusInternalServerError,
795-
CustomMessage: "can not add user setting",
796-
Err: err,
797-
})
798-
return
799-
}
800-
}
801-
802549
func (r usersRoutes) exportPersonalData(c *gin.Context) {
803550
var resp personalData
804551
u := c.MustGet("TUMLiveContext").(tools.TUMLiveContext).User
@@ -865,46 +612,6 @@ func (r usersRoutes) exportPersonalData(c *gin.Context) {
865612
_, _ = c.Writer.Write(marshal)
866613
}
867614

868-
func (r usersRoutes) resetPassword(c *gin.Context) {
869-
type resetPasswordRequest struct {
870-
Username string `json:"username"`
871-
}
872-
var req resetPasswordRequest
873-
err := c.BindJSON(&req)
874-
if err != nil {
875-
_ = c.AbortWithError(http.StatusBadRequest, tools.RequestError{
876-
Status: http.StatusBadRequest,
877-
CustomMessage: "Can't bind request body",
878-
Err: err,
879-
})
880-
return
881-
}
882-
883-
user, err := r.UsersDao.GetUserByEmail(c, req.Username)
884-
if err != nil && errors.Is(err, gorm.ErrRecordNotFound) {
885-
// wrong username/email -> pass
886-
return
887-
}
888-
if err != nil {
889-
logger.Error("can't get user for password reset", "err", err)
890-
return
891-
}
892-
link, err := r.UsersDao.CreateRegisterLink(c, user)
893-
if err != nil {
894-
logger.Error("can't create register link", "err", err)
895-
return
896-
}
897-
err = r.EmailDao.Create(c, &model.Email{
898-
From: tools.Cfg.Mail.Sender,
899-
To: user.Email.String,
900-
Subject: "TUM-Live: Reset Password",
901-
Body: "Hi! \n\nYou can reset your TUM-Live password by clicking on the following link: \n\n" + tools.Cfg.WebUrl + "/setPassword/" + link.RegisterSecret + "\n\nIf you did not request a password reset, please ignore this email. \n\nBest regards",
902-
})
903-
if err != nil {
904-
logger.Error("can't save reset password email", "err", err)
905-
}
906-
}
907-
908615
type personalData struct {
909616
UserData struct {
910617
Name string `json:"name,omitempty"`

api/users_test.go

Lines changed: 0 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -537,50 +537,3 @@ func TestSearchUserForCourse(t *testing.T) {
537537
}.Run(t, testutils.Equal)
538538
})
539539
}
540-
541-
func TestResetPassword(t *testing.T) {
542-
t.Run("/api/users/resetPassword", func(t *testing.T) {
543-
hansi := model.User{
544-
Model: gorm.Model{ID: 1},
545-
Name: "Hansi",
546-
Email: sql.NullString{String: "hansi@tum.de", Valid: true},
547-
Role: model.StudentType,
548-
}
549-
ctrl := gomock.NewController(t)
550-
tools.Cfg.Mail = tools.MailConfig{Sender: "from@invalid", Server: "server", SMIMECert: "", SMIMEKey: "", MaxMailsPerMinute: 1}
551-
gomino.TestCases{
552-
"POST[success]": {
553-
Router: func(r *gin.Engine) {
554-
wrapper := dao.DaoWrapper{
555-
UsersDao: func() dao.UsersDao {
556-
usersMock := mock_dao.NewMockUsersDao(ctrl)
557-
usersMock.EXPECT().CreateRegisterLink(gomock.Any(), hansi).Return(model.RegisterLink{RegisterSecret: "abc"}, nil).MinTimes(1).MaxTimes(1)
558-
559-
usersMock.EXPECT().GetUserByEmail(gomock.Any(), hansi.Email.String).Return(hansi, nil).MinTimes(1).MaxTimes(1)
560-
return usersMock
561-
}(),
562-
EmailDao: func() dao.EmailDao {
563-
emailMock := mock_dao.NewMockEmailDao(ctrl)
564-
emailMock.EXPECT().Create(gomock.Any(), &model.Email{
565-
From: tools.Cfg.Mail.Sender,
566-
To: hansi.Email.String,
567-
Subject: "TUM-Live: Reset Password",
568-
Body: "Hi! \n\nYou can reset your TUM-Live password by clicking on the following link: \n\n" + tools.Cfg.WebUrl + "/setPassword/abc\n\nIf you did not request a password reset, please ignore this email. \n\nBest regards",
569-
}).Return(nil).MinTimes(1).MaxTimes(1)
570-
return emailMock
571-
}(),
572-
}
573-
configGinUsersRouter(r, wrapper)
574-
},
575-
Method: http.MethodPost,
576-
Url: "/api/users/resetPassword",
577-
Body: struct {
578-
Username string `json:"username"`
579-
}{Username: "hansi@tum.de"},
580-
Middlewares: testutils.GetMiddlewares(tools.ErrorHandler),
581-
ExpectedCode: http.StatusOK,
582-
ExpectedResponse: nil,
583-
},
584-
}.Run(t, testutils.Equal)
585-
})
586-
}

0 commit comments

Comments
 (0)