/******************************************************************************* * Copyright (c) 2015 IBH SYSTEMS GmbH. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBH SYSTEMS GmbH - initial API and implementation *******************************************************************************/ package org.eclipse.packagedrone.repo.web.analytics; import static org.eclipse.packagedrone.repo.web.analytics.Constants.KEY_ANONYMIZE_IP; import static org.eclipse.packagedrone.repo.web.analytics.Constants.KEY_FORCE_SSL; import static org.eclipse.packagedrone.repo.web.analytics.Constants.KEY_TRACKING_ID; import static org.eclipse.packagedrone.repo.web.analytics.Constants.NAMESPACE; import java.io.IOException; import java.io.Writer; import java.util.Map; import javax.servlet.http.HttpServletRequest; import org.eclipse.packagedrone.repo.manage.core.CoreService; import org.eclipse.packagedrone.web.extender.WebExtender; public class AnalyticsWebExtender implements WebExtender { private CoreService service; private static final String CODE_START = "<script>\n(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)})(window,document,'script','//www.google-analytics.com/analytics.js','ga');\n\n"; private static final String CODE_END = "\n</script>\n"; public void setService ( final CoreService service ) { this.service = service; } @Override public void processHead ( final HttpServletRequest request, final Writer writer ) throws IOException { final Map<String, String> data; try { data = this.service.getCoreNamespacePlainProperties ( NAMESPACE, KEY_TRACKING_ID, KEY_ANONYMIZE_IP, KEY_FORCE_SSL ); } catch ( final Exception e ) { // if we don't get any data, still show the web page return; } final String trackingId = data.get ( KEY_TRACKING_ID ); if ( trackingId == null || trackingId.isEmpty () ) { return; } final boolean anon = Boolean.parseBoolean ( data.get ( KEY_ANONYMIZE_IP ) ); final boolean forceSsl = Boolean.parseBoolean ( data.get ( KEY_FORCE_SSL ) ); final StringBuilder sb = new StringBuilder ( CODE_START ); sb.append ( "ga('create', '" ).append ( trackingId ).append ( "', 'auto');\n" ); if ( anon ) { sb.append ( "ga('set', 'anonymizeIp', true);\n" ); } if ( forceSsl ) { sb.append ( "ga('set', 'forceSSL', true);\n" ); } sb.append ( "ga('send', 'pageview');\n" ); sb.append ( CODE_END ); writer.write ( sb.toString () ); } }