feat: assign users to teams via OIDC claims #1393

Merged
konrad merged 93 commits from viehlieb/api:950_reworked_assign_teams_via_oidc into main 2024-03-02 08:47:12 +00:00
2 changed files with 8 additions and 10 deletions
Showing only changes of commit 7fb8968299 - Show all commits

View File

@ -18,7 +18,6 @@ package models
import (
"code.vikunja.io/api/pkg/events"
"code.vikunja.io/api/pkg/log"
user2 "code.vikunja.io/api/pkg/user"
"code.vikunja.io/web"
"xorm.io/xorm"
@ -55,7 +54,7 @@ func (tm *TeamMember) Create(s *xorm.Session, a web.Auth) (err error) {
// Check if that user is already part of the team
exists, err := s.
Where("team_id = ? AND user_name = ?", tm.TeamID, tm.UserID).
Where("team_id = ? AND user_id = ?", tm.TeamID, tm.UserID).
Get(&TeamMember{})
if err != nil {
return
@ -110,23 +109,19 @@ func (tm *TeamMember) Delete(s *xorm.Session, _ web.Auth) (err error) {
return
}
func (tm *TeamMember) CheckMembership(s *xorm.Session) (err error) {
func (tm *TeamMember) CheckMembership(s *xorm.Session) (exists bool, err error) {
member, err := user2.GetUserByUsername(s, tm.Username)
viehlieb marked this conversation as resolved Outdated

Can you do this either with a join to avoid loading the user or at least use the "simple" function?

Can you do this either with a join to avoid loading the user or at least use the "simple" function?

done.

done.
if err != nil {
viehlieb marked this conversation as resolved Outdated

This should be Exist(&TeamMember{}).

This should be `Exist(&TeamMember{})`.

done

done
return
}
tm.UserID = member.ID
exists, err := s.
exists, err = s.
Where("team_id = ? AND user_id = ?", tm.TeamID, tm.UserID).
Get(&TeamMember{})
viehlieb marked this conversation as resolved Outdated

Couldn't you just return the result here directly?

Couldn't you just return the result here directly?

In fact this function is not needed anymore for this feature, so I'll just remove it.
It was used for finding out whether a user should be signed out from team or deleted.

In fact this function is not needed anymore for this feature, so I'll just remove it. It was used for finding out whether a user should be signed out from team or deleted.
if err != nil {
if exists {
return
}
viehlieb marked this conversation as resolved Outdated

If it's only counting, please use Count().

If it's only counting, please use `Count()`.

done

done
if exists {
log.Errorf("Team member already exists %v", ErrUserIsMemberOfTeam{tm.UserID, tm.UserID})
return ErrUserIsMemberOfTeam{tm.UserID, tm.UserID}
}
return
return exists, ErrUserIsMemberOfTeam{tm.UserID, tm.UserID}
}
// Update toggles a team member's admin status

View File

@ -20,6 +20,7 @@ import (
"time"
"code.vikunja.io/api/pkg/db"
"code.vikunja.io/api/pkg/log"
"code.vikunja.io/api/pkg/events"
"code.vikunja.io/api/pkg/user"
@ -38,6 +39,8 @@ type Team struct {
// The team's description.
Description string `xorm:"longtext null" json:"description"`
CreatedByID int64 `xorm:"bigint not null INDEX" json:"-"`
// The team's oidc id delivered by the oidc provider
OidcID string `xorm:"varchar(250) null" maxLength:"250" json:"oidc_id"`
// The user who created this team.
CreatedBy *user.User `xorm:"-" json:"created_by"`