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
26
27
28
29
30
31
32
33
34 package info.magnolia.setup;
35
36 import info.magnolia.commands.impl.MarkNodeAsDeletedCommand;
37 import info.magnolia.jcr.util.NodeTypes;
38 import info.magnolia.module.AbstractModuleVersionHandler;
39 import info.magnolia.module.InstallContext;
40 import info.magnolia.module.delta.AddURIPermissionTask;
41 import info.magnolia.module.delta.ArrayDelegateTask;
42 import info.magnolia.module.delta.BootstrapConditionally;
43 import info.magnolia.module.delta.BootstrapSingleModuleResource;
44 import info.magnolia.module.delta.BootstrapSingleResource;
45 import info.magnolia.module.delta.CheckAndModifyPropertyValueTask;
46 import info.magnolia.module.delta.Condition;
47 import info.magnolia.module.delta.CreateNodeTask;
48 import info.magnolia.module.delta.DeltaBuilder;
49 import info.magnolia.module.delta.FindAndChangeTemplateIdTask;
50 import info.magnolia.module.delta.MoveAndRenamePropertyTask;
51 import info.magnolia.module.delta.NoSameNameSiblingsCondition;
52 import info.magnolia.module.delta.NodeExistsDelegateTask;
53 import info.magnolia.module.delta.OrderFilterBeforeTask;
54 import info.magnolia.module.delta.PartialBootstrapTask;
55 import info.magnolia.module.delta.PropertyExistsDelegateTask;
56 import info.magnolia.module.delta.RemoveNodeTask;
57 import info.magnolia.module.delta.RemovePermissionTask;
58 import info.magnolia.module.delta.Task;
59 import info.magnolia.module.delta.TextFileConditionsUtil;
60 import info.magnolia.module.delta.WarnTask;
61 import info.magnolia.module.delta.WebXmlConditionsUtil;
62 import info.magnolia.module.delta.WorkspaceXmlConditionsUtil;
63 import info.magnolia.repository.RepositoryConstants;
64 import info.magnolia.setup.for5_0.CheckOrCreateLastActivatedPropertyTask;
65 import info.magnolia.setup.for5_0.ConvertMetaDataUpdateTask;
66 import info.magnolia.setup.for5_0.Register50NodeTypeTask;
67 import info.magnolia.setup.for5_0.RemoveMetaDataInNodeTypeDefinitionTask;
68 import info.magnolia.setup.initial.GenericTasks;
69
70 import java.util.ArrayList;
71 import java.util.List;
72
73 import javax.jcr.ImportUUIDBehavior;
74
75
76
77
78
79 public class CoreModuleVersionHandler extends AbstractModuleVersionHandler {
80 public static final String BOOTSTRAP_AUTHOR_INSTANCE_PROPERTY = "magnolia.bootstrap.authorInstance";
81
82
83 private final BootstrapConditionally auditTrailManagerTask = new BootstrapConditionally("New auditory log configuration", "Install new configuration for auditory log manager.", "/mgnl-bootstrap/core/config.server.auditLogging.xml");
84 private final BootstrapSingleResource bootstrapFreemarker = new BootstrapSingleResource("Freemarker configuration", "Freemarker template loaders can now be configured in Magnolia. Adds default configuration", "/mgnl-bootstrap/core/config.server.rendering.freemarker.xml");
85 private final CreateNodeTask addFreemarkerSharedVariables = new CreateNodeTask("Freemarker configuration", "Adds sharedVariables node to the Freemarker configuration",
86 RepositoryConstants.CONFIG, "/server/rendering/freemarker", "sharedVariables", NodeTypes.ContentNode.NAME);
87 private final BootstrapSingleResource bootstrapWebContainerResources = new BootstrapSingleResource("Web container resources configuration", "Global configuration which resources are not meant to be handled by Magnolia. For instance JSP files.", "/mgnl-bootstrap/core/config.server.webContainerResources.xml");
88 private final BootstrapSingleModuleResource bootstrapChannelManagement = new BootstrapSingleModuleResource("ChannelManagement configuration", "", "config.server.rendering.channelManagement.xml");
89
90 private final BootstrapSingleModuleResource bootstrapChannelFilter = new BootstrapSingleModuleResource("ChannelFilter configuration", "", "config.server.filters.channel.xml");
91 private final Task placeChannelBeforeLogout = new OrderFilterBeforeTask("channel", new String[] { "logout" });
92 private final Task updateSecurityBaseRole = updateSecurityBaseRole();
93
94 private Task updateSecurityBaseRole() {
95 ArrayDelegateTask permissionsTask = new ArrayDelegateTask("Update security-base role", "Disallow access to view configuration/tools pages");
96 permissionsTask.addTask(new RemovePermissionTask("", "", "security-base", "uri", "/.magnolia/pages/installedModulesList.html", AddURIPermissionTask.DENY));
97 permissionsTask.addTask(new RemovePermissionTask("", "", "security-base", "uri", "/.magnolia/pages/jcrUtils.html", AddURIPermissionTask.DENY));
98 permissionsTask.addTask(new RemovePermissionTask("", "", "security-base", "uri", "/.magnolia/pages/configuration.html", AddURIPermissionTask.DENY));
99 permissionsTask.addTask(new RemovePermissionTask("", "", "security-base", "uri", "/.magnolia/pages/logViewer.html", AddURIPermissionTask.DENY));
100 permissionsTask.addTask(new RemovePermissionTask("", "", "security-base", "uri", "/.magnolia/pages/sendMail.html", AddURIPermissionTask.DENY));
101 permissionsTask.addTask(new AddURIPermissionTask("", "", "security-base", "/.magnolia/pages/installedModulesList*", AddURIPermissionTask.DENY));
102 permissionsTask.addTask(new AddURIPermissionTask("", "", "security-base", "/.magnolia/pages/jcrUtils*", AddURIPermissionTask.DENY));
103 permissionsTask.addTask(new AddURIPermissionTask("", "", "security-base", "/.magnolia/pages/configuration*", AddURIPermissionTask.DENY));
104 permissionsTask.addTask(new AddURIPermissionTask("", "", "security-base", "/.magnolia/pages/logViewer*", AddURIPermissionTask.DENY));
105 permissionsTask.addTask(new AddURIPermissionTask("", "", "security-base", "/.magnolia/pages/sendMail*", AddURIPermissionTask.DENY));
106
107 permissionsTask.addTask(new AddURIPermissionTask("", "", "security-base", "/.magnolia/pages/users*", AddURIPermissionTask.DENY));
108 permissionsTask.addTask(new AddURIPermissionTask("", "", "security-base", "/.magnolia/pages/import*", AddURIPermissionTask.DENY));
109 permissionsTask.addTask(new AddURIPermissionTask("", "", "security-base", "/.magnolia/pages/export*", AddURIPermissionTask.DENY));
110 permissionsTask.addTask(new AddURIPermissionTask("", "", "security-base", "/.magnolia/pages/messages*", AddURIPermissionTask.DENY));
111 permissionsTask.addTask(new AddURIPermissionTask("", "", "security-base", "/.magnolia/pages/permission*", AddURIPermissionTask.DENY));
112 permissionsTask.addTask(new AddURIPermissionTask("", "", "security-base", "/.magnolia/pages/developmentUtils*", AddURIPermissionTask.DENY));
113 permissionsTask.addTask(new AddURIPermissionTask("", "", "security-base", "/.magnolia/pages/activationTools*", AddURIPermissionTask.DENY));
114 permissionsTask.addTask(new AddURIPermissionTask("", "", "security-base", "/.magnolia/pages/migrationReport*", AddURIPermissionTask.DENY));
115 permissionsTask.addTask(new AddURIPermissionTask("", "", "security-base", "/.magnolia/pages/backup*", AddURIPermissionTask.DENY));
116 permissionsTask.addTask(new AddURIPermissionTask("", "", "security-base", "/.magnolia/pages/activationMonitor*", AddURIPermissionTask.DENY));
117 permissionsTask.addTask(new AddURIPermissionTask("", "", "security-base", "/.magnolia/pages/installedModulesList*", AddURIPermissionTask.DENY));
118 permissionsTask.addTask(new AddURIPermissionTask("", "", "security-base", "/.magnolia/pages/allModulesList*", AddURIPermissionTask.DENY));
119 permissionsTask.addTask(new AddURIPermissionTask("", "", "security-base", "/.magnolia/pages/cacheTools*", AddURIPermissionTask.DENY));
120 permissionsTask.addTask(new AddURIPermissionTask("", "", "security-base", "/.magnolia/pages/flows*", AddURIPermissionTask.DENY));
121 return permissionsTask;
122 }
123
124 public CoreModuleVersionHandler() {
125 super();
126
127 register(DeltaBuilder.checkPrecondition("4.5", "5.0"));
128
129 register(DeltaBuilder.update("4.5.2", "")
130 .addTask(new PropertyExistsDelegateTask("Fix property name", "", RepositoryConstants.CONFIG, "/server/security/userManagers/system", "realName", new MoveAndRenamePropertyTask("Fix propertyName", "/server/security/userManagers/system", "realName", "/server/security/userManagers/system", "realmName")))
131 .addTask(new PropertyExistsDelegateTask("Fix property name", "", RepositoryConstants.CONFIG, "/server/security/userManagers/admin", "realName", new MoveAndRenamePropertyTask("Fix propertyName", "/server/security/userManagers/admin", "realName", "/server/security/userManagers/admin", "realmName"))));
132
133 register((DeltaBuilder.update("4.5.9", ""))
134 .addTask(new NodeExistsDelegateTask("AuditLogging configurations", "Add auditLogging configurations for delete action", "config", "/server/auditLogging/logConfigurations/delete", null, new PartialBootstrapTask("", "", "/mgnl-bootstrap/core/config.server.auditLogging.xml", "/auditLogging/logConfigurations/delete", ImportUUIDBehavior.IMPORT_UUID_CREATE_NEW)))
135 .addTask(new CheckAndModifyPropertyValueTask("AuditLogging configurations", "Change auditLogging class", "config", "/server/auditLogging", "class", "info.magnolia.logging.AuditLoggingManager", "info.magnolia.audit.AuditLoggingManager"))
136 .addTask(updateSecurityBaseRole));
137 register(DeltaBuilder.update("5.0", "")
138 .addTask(new Register50NodeTypeTask("Register the new M5 node Type", "", RepositoryConstants.CONFIG))
139 .addTask(new RemoveMetaDataInNodeTypeDefinitionTask("Un register the metaData child node", "", RepositoryConstants.CONFIG))
140 .addTask(new ConvertMetaDataUpdateTask("Convert MetaData Task", "Remove the metaData sub node and replace them with mixIn when appropriate"))
141 .addTask(new RemoveNodeTask("Remove PageEditorServlet", "Remove obsolete PageEditorServlet configuration.", RepositoryConstants.CONFIG, "/server/filters/servlets/PageEditorServlet"))
142 .addTask(new RemoveNodeTask("Remove obsolete 'templating-editor' configuration", "", RepositoryConstants.CONFIG, "/modules/magnolia-templating-editor"))
143 .addTask(new PartialBootstrapTask("Bootstrap link transformers", "Bootstrap 'server/rendering/linkManagement/transformers", "/mgnl-bootstrap/core/config.server.rendering.linkManagement.xml", "/linkManagement/transformers")));
144 register((DeltaBuilder.update("5.0.1", ""))
145 .addTask(new CheckAndModifyPropertyValueTask("MIMEMapping", "Change xsl extension mime-type from text/xml to application/xml", RepositoryConstants.CONFIG, "/server/MIMEMapping/xsl", "mime-type", "text/xml", "application/xml"))
146 .addTask(new CheckAndModifyPropertyValueTask("MIMEMapping", "Change xml extension mime-type from text/xml to application/xml", RepositoryConstants.CONFIG, "/server/MIMEMapping/xml", "mime-type", "text/xml", "application/xml")));
147 register((DeltaBuilder.update("5.0.3", ""))
148 .addTask(new PartialBootstrapTask("JSON", "Add JSON mime-type", "/mgnl-bootstrap/core/config.server.MIMEMapping.xml", "/MIMEMapping/json")));
149 register((DeltaBuilder.update("5.1", ""))
150 .addTask(new WarnTask("respectOrderDocument parameter", "As of Magnolia 5.1, the respectOrderDocument parameter has been reintroduced in repo config files and set to true by default. You will need to set it manually for each workspace in your installation. Please, refer to the release notes for more details."))
151 .addTask(new RemoveNodeTask("Remove intercept filter", "Removes no longer used intercept filter.", RepositoryConstants.CONFIG, "/server/filters/cms/intercept")));
152 register((DeltaBuilder.update("5.1.1", ""))
153 .addTask(new NodeExistsDelegateTask("Set mgnl:lastActivated date of the user superuser", "Set mgnl:lastActivated date of the user superuser (if not set yet)", RepositoryConstants.USERS, "/system/superuser",
154 new CheckOrCreateLastActivatedPropertyTask("", "", RepositoryConstants.USERS, "/system/superuser")))
155 .addTask(new NodeExistsDelegateTask("Set mgnl:lastActivated date of the user anonymous", "Set mgnl:lastActivated date of the user anonymous (if not set yet)", RepositoryConstants.USERS, "/system/anonymous",
156 new CheckOrCreateLastActivatedPropertyTask("", "", RepositoryConstants.USERS, "/system/anonymous")))
157 .addTask(new NodeExistsDelegateTask("Set mgnl:lastActivated date of the superuser role", "Set mgnl:lastActivated date of the superuser role (if not set yet)", RepositoryConstants.USER_ROLES, "/superuser",
158 new CheckOrCreateLastActivatedPropertyTask("", "", RepositoryConstants.USER_ROLES, "/superuser")))
159 .addTask(new NodeExistsDelegateTask("Set mgnl:lastActivated date of the anonymous role", "Set mgnl:lastActivated date of the anonymous role (if not set yet)", RepositoryConstants.USER_ROLES, "/anonymous",
160 new CheckOrCreateLastActivatedPropertyTask("", "", RepositoryConstants.USER_ROLES, "/anonymous")))
161 .addTask(new NodeExistsDelegateTask("Set mgnl:lastActivated date of the security-base role", "Set mgnl:lastActivated date of the security-base role (if not set yet)", RepositoryConstants.USER_ROLES, "/security-base",
162 new CheckOrCreateLastActivatedPropertyTask("", "", RepositoryConstants.USER_ROLES, "/security-base")))
163 .addTask(new FindAndChangeTemplateIdTask("Change template id mgnlDelete", "Change template id mgnlDeleted to ui-admincentral:deleted for all content marked as deleted in website repository", RepositoryConstants.WEBSITE, "mgnlDeleted", MarkNodeAsDeletedCommand.DELETED_NODE_TEMPLATE))
164 .addTask(new FindAndChangeTemplateIdTask("Change template id adminInterface:mgnlDeleted", "Change template id adminInterface:mgnlDeleted to ui-admincentral:deleted for all content marked as deleted in website repository", RepositoryConstants.WEBSITE, "adminInterface:mgnlDeleted", MarkNodeAsDeletedCommand.DELETED_NODE_TEMPLATE)));
165 register((DeltaBuilder.update("5.1.2", ""))
166 .addTask(new ChangeNodeTypeOfSubAppsTask("Change primary node type of subapps", "If primary node type of subapps node is set to " + NodeTypes.Content.NAME + " then change it to " + NodeTypes.ContentNode.NAME))
167 .addTask(new PartialBootstrapTask("Anonymous user", "Change anonymous user permission. He can't have write access to himself.", "/mgnl-bootstrap/core/users.system.anonymous.xml", "/anonymous/acl_users")));
168
169 }
170
171 @Override
172 protected List<Task> getBasicInstallTasks(InstallContext ctx) {
173 final List<Task> tasks = new ArrayList<Task>();
174 tasks.addAll(GenericTasks.genericTasksForNewInstallation());
175 tasks.add(auditTrailManagerTask);
176 tasks.add(bootstrapFreemarker);
177 tasks.add(addFreemarkerSharedVariables);
178 tasks.add(bootstrapWebContainerResources);
179 tasks.add(new BootstrapConditionally("Security", "Bootstraps security-base role.", "/mgnl-bootstrap/core/userroles.security-base.xml"));
180
181 tasks.add(new HashUsersPasswords());
182 tasks.add(bootstrapChannelManagement);
183 tasks.add(bootstrapChannelFilter);
184 tasks.add(placeChannelBeforeLogout);
185
186 return tasks;
187 }
188
189 @Override
190 protected List<Condition> getInstallConditions() {
191 final ArrayList<Condition> conditions = new ArrayList<Condition>();
192 final WebXmlConditionsUtil u = new WebXmlConditionsUtil(conditions);
193 u.servletIsNowWrapped("ActivationHandler");
194 u.servletIsNowWrapped("AdminTreeServlet");
195 u.servletIsNowWrapped("classpathspool");
196 u.servletIsNowWrapped("DialogServlet");
197 u.servletIsNowWrapped("PageServlet");
198 u.servletIsNowWrapped("log4j");
199 u.servletIsNowWrapped("FCKEditorSimpleUploadServlet");
200 u.servletIsDeprecated("uuidRequestDispatcher");
201 u.filterIsDeprecated("info.magnolia.cms.filters.MagnoliaManagedFilter", "info.magnolia.cms.filters.MgnlMainFilter");
202 u.filterMustBeRegisteredWithCorrectDispatchers("info.magnolia.cms.filters.MgnlMainFilter");
203 u.listenerIsDeprecated("info.magnolia.cms.servlets.PropertyInitializer", "info.magnolia.cms.servlets.MgnlServletContextListener");
204 u.listenerIsDeprecated("info.magnolia.cms.beans.config.ShutdownManager", "info.magnolia.cms.servlets.MgnlServletContextListener");
205 final WorkspaceXmlConditionsUtil u2 = new WorkspaceXmlConditionsUtil(conditions);
206 u2.textFilterClassesAreNotSet();
207
208 conditions.add(new SystemTmpDirCondition());
209 conditions.add(new NoSameNameSiblingsCondition());
210
211 return conditions;
212 }
213
214 private List<Condition> get45ConfigFileConditions() {
215 List<Condition> conditions = new ArrayList<Condition>();
216
217 final TextFileConditionsUtil u = new TextFileConditionsUtil(conditions);
218 u.addFalseConditionIfExpressionIsContained(System.getProperty("java.security.auth.login.config"), "^Jackrabbit.*");
219
220 final WorkspaceXmlConditionsUtil u2 = new WorkspaceXmlConditionsUtil(conditions);
221 u2.textFilterClassesAreNotSet();
222 u2.paramAnalyzerIsNotSet();
223 u2.accessControlProviderIsSet();
224
225 return conditions;
226 }
227
228 }