mirror of
https://github.com/pocket-id/pocket-id.git
synced 2025-12-06 17:23:16 +03:00
60 lines
1.5 KiB
Go
60 lines
1.5 KiB
Go
package controller
|
|
|
|
import (
|
|
"github.com/stonith404/pocket-id/backend/internal/dto"
|
|
"github.com/stonith404/pocket-id/backend/internal/middleware"
|
|
"github.com/stonith404/pocket-id/backend/internal/utils"
|
|
"net/http"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
"github.com/stonith404/pocket-id/backend/internal/service"
|
|
)
|
|
|
|
func NewAuditLogController(group *gin.RouterGroup, auditLogService *service.AuditLogService, jwtAuthMiddleware *middleware.JwtAuthMiddleware) {
|
|
alc := AuditLogController{
|
|
auditLogService: auditLogService,
|
|
}
|
|
|
|
group.GET("/audit-logs", jwtAuthMiddleware.Add(false), alc.listAuditLogsForUserHandler)
|
|
}
|
|
|
|
type AuditLogController struct {
|
|
auditLogService *service.AuditLogService
|
|
}
|
|
|
|
func (alc *AuditLogController) listAuditLogsForUserHandler(c *gin.Context) {
|
|
var sortedPaginationRequest utils.SortedPaginationRequest
|
|
if err := c.ShouldBindQuery(&sortedPaginationRequest); err != nil {
|
|
c.Error(err)
|
|
return
|
|
}
|
|
|
|
userID := c.GetString("userID")
|
|
|
|
// Fetch audit logs for the user
|
|
logs, pagination, err := alc.auditLogService.ListAuditLogsForUser(userID, sortedPaginationRequest)
|
|
if err != nil {
|
|
c.Error(err)
|
|
return
|
|
}
|
|
|
|
// Map the audit logs to DTOs
|
|
var logsDtos []dto.AuditLogDto
|
|
err = dto.MapStructList(logs, &logsDtos)
|
|
if err != nil {
|
|
c.Error(err)
|
|
return
|
|
}
|
|
|
|
// Add device information to the logs
|
|
for i, logsDto := range logsDtos {
|
|
logsDto.Device = alc.auditLogService.DeviceStringFromUserAgent(logs[i].UserAgent)
|
|
logsDtos[i] = logsDto
|
|
}
|
|
|
|
c.JSON(http.StatusOK, gin.H{
|
|
"data": logsDtos,
|
|
"pagination": pagination,
|
|
})
|
|
}
|