1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 package org.bitrepository.audittrails;
26
27 import java.io.BufferedReader;
28 import java.io.File;
29 import java.io.FileReader;
30 import java.io.IOException;
31 import java.util.Properties;
32
33 import access.AccessComponentFactory;
34 import access.getaudittrails.AuditTrailClient;
35 import org.bitrepository.audittrails.collector.AuditTrailCollector;
36 import org.bitrepository.audittrails.preserver.AuditTrailPreserver;
37 import org.bitrepository.audittrails.preserver.LocalAuditTrailPreserver;
38 import org.bitrepository.audittrails.store.AuditTrailDatabaseManager;
39 import org.bitrepository.audittrails.store.AuditTrailServiceDAO;
40 import org.bitrepository.audittrails.store.AuditTrailStore;
41 import org.bitrepository.common.settings.Settings;
42 import org.bitrepository.common.settings.XMLFileSettingsLoader;
43 import org.bitrepository.modify.ModifyComponentFactory;
44 import org.bitrepository.modify.putfile.PutFileClient;
45 import org.bitrepository.protocol.ProtocolComponentFactory;
46 import org.bitrepository.protocol.security.BasicMessageAuthenticator;
47 import org.bitrepository.protocol.security.BasicMessageSigner;
48 import org.bitrepository.protocol.security.BasicOperationAuthorizor;
49 import org.bitrepository.protocol.security.BasicSecurityManager;
50 import org.bitrepository.protocol.security.MessageAuthenticator;
51 import org.bitrepository.protocol.security.MessageSigner;
52 import org.bitrepository.protocol.security.OperationAuthorizor;
53 import org.bitrepository.protocol.security.PermissionStore;
54 import org.bitrepository.protocol.security.SecurityManager;
55 import org.bitrepository.service.ServiceSettingsProvider;
56 import org.bitrepository.service.contributor.ContributorMediator;
57 import org.bitrepository.service.contributor.SimpleContributorMediator;
58 import org.bitrepository.service.database.DatabaseManager;
59 import org.bitrepository.settings.referencesettings.ServiceType;
60 import org.slf4j.Logger;
61 import org.slf4j.LoggerFactory;
62
63
64
65
66 public final class AuditTrailServiceFactory {
67
68 private static Logger log = LoggerFactory.getLogger(AuditTrailServiceFactory.class);
69
70
71 private static AuditTrailService auditTrailService;
72
73 private static String configurationDir;
74
75 private static String privateKeyFile;
76
77
78 private static final String CONFIGFILE = "audittrails.properties";
79
80 private static final String PRIVATE_KEY_FILE = "org.bitrepository.audit-trail-service.privateKeyFile";
81
82
83
84
85 private AuditTrailServiceFactory() { }
86
87
88
89
90
91 public static synchronized void init(String confDir) {
92 configurationDir = confDir;
93 }
94
95
96
97
98
99 public static synchronized AuditTrailService getAuditTrailService() {
100 if(auditTrailService == null) {
101 MessageAuthenticator authenticator;
102 MessageSigner signer;
103 OperationAuthorizor authorizer;
104 PermissionStore permissionStore;
105 SecurityManager securityManager;
106 ServiceSettingsProvider settingsLoader =
107 new ServiceSettingsProvider(
108 new XMLFileSettingsLoader(configurationDir), ServiceType.AUDIT_TRAIL_SERVICE);
109
110 Settings settings = settingsLoader.getSettings();
111 try {
112 loadProperties();
113 permissionStore = new PermissionStore();
114 authenticator = new BasicMessageAuthenticator(permissionStore);
115 signer = new BasicMessageSigner();
116 authorizer = new BasicOperationAuthorizor(permissionStore);
117 securityManager = new BasicSecurityManager(settings.getRepositorySettings(), privateKeyFile,
118 authenticator, signer, authorizer, permissionStore,
119 settings.getReferenceSettings().getAuditTrailServiceSettings().getID());
120
121 ContributorMediator mediator = new SimpleContributorMediator(
122 ProtocolComponentFactory.getInstance().getMessageBus(settings, securityManager),
123 settings, null);
124
125 PutFileClient putClient = ModifyComponentFactory.getInstance().retrievePutClient(settings,
126 securityManager, "audit-trail-preserver");
127
128 DatabaseManager auditTrailServiceDatabaseManager = new AuditTrailDatabaseManager(
129 settings.getReferenceSettings().getAuditTrailServiceSettings().getAuditTrailServiceDatabase());
130 AuditTrailStore store = new AuditTrailServiceDAO(auditTrailServiceDatabaseManager);
131 AuditTrailClient client = AccessComponentFactory.getInstance().createAuditTrailClient(settings,
132 securityManager, settings.getReferenceSettings().getAuditTrailServiceSettings().getID());
133
134 AuditTrailCollector collector = new AuditTrailCollector(settings, client, store);
135 AuditTrailPreserver preserver;
136 if (settings.getReferenceSettings().getAuditTrailServiceSettings().isSetAuditTrailPreservation()) {
137 preserver = new LocalAuditTrailPreserver(
138 settings, store, putClient, ProtocolComponentFactory.getInstance().getFileExchange(settings));
139 preserver.start();
140 } else {
141 log.info("Audit trail preservation disabled, no configuration defined.");
142 }
143
144 auditTrailService = new AuditTrailService(store, collector, mediator, settings);
145 } catch (IOException e) {
146 throw new RuntimeException(e);
147 }
148 }
149
150 return auditTrailService;
151 }
152
153
154
155
156
157 private static void loadProperties() throws IOException {
158 Properties properties = new Properties();
159 File propertiesFile = new File(configurationDir, CONFIGFILE);
160 BufferedReader propertiesReader = new BufferedReader(new FileReader(propertiesFile));
161 properties.load(propertiesReader);
162 privateKeyFile = properties.getProperty(PRIVATE_KEY_FILE);
163 }
164 }