package models import ( "log" "time" ) // Define audit functions type Audit struct { AuditId int `db:"AuditId" json:"auditId"` UserId int `db:"UserId" json:"userId"` SecretId int `db:"SecretId" json:"secretId"` EventText string `db:"EventText" json:"eventText"` EventTime time.Time `db:"EventTime" json:"eventTime"` IpAddress string `db:"IpAddress" json:"ipAddress"` } // AuditLogAdd adds a new audit record to the database func (a *Audit) AuditLogAdd() (*Audit, error) { var err error // Populate timestamp field if not already set if a.EventTime.IsZero() { a.EventTime = time.Now().UTC() } result, err := db.NamedExec(("INSERT INTO audit (UserId, SecretId, EventText, EventTime, IpAddress) VALUES (:UserId, :SecretId, :EventText, :EventTime, :IpAddress);"), a) if err != nil { log.Printf("AuditLogAdd error executing sql record : '%s'\n", err) return &Audit{}, err } else { affected, _ := result.RowsAffected() id, _ := result.LastInsertId() a.AuditId = int(id) log.Printf("AuditLogAdd insert returned result id '%d' affecting %d row(s).\n", id, affected) } return a, nil } // AuditList returns a list of all audit logs in database func AuditLogList() ([]Audit, error) { var results []Audit // Query database for groups rows, err := db.Queryx("SELECT * FROM audit") if err != nil { log.Printf("AuditLogList error executing sql record : '%s'\n", err) return results, err } else { // parse all the results into a slice for rows.Next() { var a Audit err = rows.StructScan(&a) if err != nil { log.Printf("AuditLogList error parsing sql record : '%s'\n", err) return results, err } results = append(results, a) } log.Printf("AuditLogList retrieved '%d' results\n", len(results)) } return results, nil }