001/* 002 * Stallion Core: A Modern Web Framework 003 * 004 * Copyright (C) 2015 - 2016 Stallion Software LLC. 005 * 006 * This program is free software: you can redistribute it and/or modify it under the terms of the 007 * GNU General Public License as published by the Free Software Foundation, either version 2 of 008 * the License, or (at your option) any later version. This program is distributed in the hope that 009 * it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of 010 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public 011 * License for more details. You should have received a copy of the GNU General Public License 012 * along with this program. If not, see <http://www.gnu.org/licenses/gpl-2.0.html>. 013 * 014 * 015 * 016 */ 017 018package io.stallion.services; 019 020import io.stallion.Context; 021import io.stallion.dataAccess.*; 022import io.stallion.dataAccess.db.DB; 023import io.stallion.utils.DateUtils; 024import io.stallion.utils.json.JSON; 025 026import static io.stallion.utils.Literals.truncate; 027 028 029public class AuditTrailController extends StandardModelController<AuditTrail> { 030 public static AuditTrailController instance() { 031 return (AuditTrailController) DataAccessRegistry.instance().get("stallion_audit_trail"); 032 } 033 034 public static void register() { 035 DataAccessRegistration reg = new DataAccessRegistration() 036 .setBucket("stallion_audit_trail") 037 .setModelClass(AuditTrail.class) 038 .setControllerClass(AuditTrailController.class); 039 if (DB.available()) { 040 reg.setDatabaseBacked(true); 041 reg.setStashClass(NoStash.class); 042 } 043 DataAccessRegistry.instance().register(reg); 044 } 045 046 047 public void logUpdate(Model obj) { 048 AuditTrail at = new AuditTrail() 049 .setCreatedAt(DateUtils.utcNow()) 050 .setOrgId(Context.getUser().getOrgId()) 051 .setKeepLongTerm(false) 052 .setObjectData(JSON.stringify(obj)) 053 .setRemoteIp(Context.getRequest().getActualIp()) 054 .setTable(obj.getBucket()) 055 .setObjectId(obj.getId()) 056 .setUserAgent(truncate(Context.getRequest().getHeader("User-agent"), 200)) 057 .setUserEmail(Context.getUser().getEmail()) 058 .setValetEmail(Context.getValetEmail()) 059 .setValetId(Context.getValetUserId()) 060 ; 061 AuditTrailController.instance().save(at); 062 } 063}