add logging.

This commit is contained in:
2020-05-24 16:30:25 +02:00
parent e2c3b53d50
commit a4c019e67b
22 changed files with 883 additions and 30 deletions
+90
View File
@@ -26,6 +26,7 @@ type Auth struct {
users repositories.UserRepository
session repositories.SessionRepository
projects repositories.ProjectRepository
issues repositories.IssueRepository
}
func (auth *Auth) Login(ctx context.Context, username, password string) (*models.User, error) {
@@ -225,3 +226,92 @@ func (auth *Auth) EditUser(ctx context.Context, username string, setName *string
return user, nil
}
func (auth *Auth) FilterLogList(ctx context.Context, logs *[]*models.Log) {
user := auth.UserFromContext(ctx)
if user == nil {
panic("Auth.FilterLogList called without user")
}
auth.FilterLog(ctx, *logs...)
deleteList := make([]int, 0, len(*logs)/2)
for i, log := range *logs {
if log.Empty() && log.UserID != user.ID {
deleteList = append(deleteList, i-len(deleteList))
}
}
list := *logs
for _, index := range deleteList {
list = append(list[:index], list[index+1:]...)
}
*logs = list
}
func (auth *Auth) FilterLog(ctx context.Context, logs ...*models.Log) {
userID := ""
if user := auth.UserFromContext(ctx); user != nil {
userID = user.ID
}
accessMap := make(map[string]bool)
deleteList := make([]int, 0, 16)
for _, log := range logs {
if userID == log.UserID {
continue
}
deleteList = deleteList[:0]
for i, item := range log.Items {
if access, ok := accessMap[item.IssueID]; ok && access {
continue
} else if ok && !access {
deleteList = append(deleteList, i-len(deleteList))
continue
}
issue, err := auth.issues.Find(ctx, item.IssueID)
if err != nil {
deleteList = append(deleteList, i-len(deleteList))
accessMap[item.IssueID] = true
continue
}
_, err = auth.IssuePermission(ctx, *issue)
if err != nil {
deleteList = append(deleteList, i-len(deleteList))
}
accessMap[issue.ID] = err != nil
}
for _, index := range deleteList {
log.Items = append(log.Items[:index], log.Items[index+1:]...)
}
deleteList = deleteList[:0]
for i, task := range log.Tasks {
if access, ok := accessMap[task.IssueID]; ok && access {
continue
} else if ok && !access {
deleteList = append(deleteList, i-len(deleteList))
continue
}
issue, err := auth.issues.Find(ctx, task.IssueID)
if err != nil {
deleteList = append(deleteList, i-len(deleteList))
accessMap[task.IssueID] = true
continue
}
_, err = auth.IssuePermission(ctx, *issue)
if err != nil {
deleteList = append(deleteList, i-len(deleteList))
}
accessMap[issue.ID] = err != nil
}
for _, index := range deleteList {
log.Tasks = append(log.Tasks[:index], log.Tasks[index+1:]...)
}
}
}