From b57b9ec3edd2ca7e7e44190f85e3743cea822e3e Mon Sep 17 00:00:00 2001 From: Fabrice Bacchella <fbacchella@spamcop.net> Date: Mon, 15 Jun 2015 11:55:05 -0400 Subject: [PATCH] First draft for a customized avatar image --- src/main/java/com/gitblit/wicket/GitBlitWebApp.java | 56 +++++++++++++++++++++++++++++++++++++++++++++++++------- 1 files changed, 49 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/gitblit/wicket/GitBlitWebApp.java b/src/main/java/com/gitblit/wicket/GitBlitWebApp.java index 036a05a..39cdbb4 100644 --- a/src/main/java/com/gitblit/wicket/GitBlitWebApp.java +++ b/src/main/java/com/gitblit/wicket/GitBlitWebApp.java @@ -32,6 +32,7 @@ import ro.fortsoft.pf4j.PluginState; import ro.fortsoft.pf4j.PluginWrapper; +import com.gitblit.AvatarGenerator; import com.gitblit.IStoredSettings; import com.gitblit.Keys; import com.gitblit.extensions.GitblitWicketPlugin; @@ -47,6 +48,7 @@ import com.gitblit.manager.IUserManager; import com.gitblit.tickets.ITicketService; import com.gitblit.transport.ssh.IPublicKeyManager; +import com.gitblit.utils.XssFilter; import com.gitblit.wicket.pages.ActivityPage; import com.gitblit.wicket.pages.BlamePage; import com.gitblit.wicket.pages.BlobDiffPage; @@ -109,6 +111,8 @@ private final IStoredSettings settings; + private final XssFilter xssFilter; + private final IRuntimeManager runtimeManager; private final IPluginManager pluginManager; @@ -148,6 +152,7 @@ this.publicKeyManagerProvider = publicKeyManagerProvider; this.ticketServiceProvider = ticketServiceProvider; this.settings = runtimeManager.getSettings(); + this.xssFilter = runtimeManager.getXssFilter(); this.runtimeManager = runtimeManager; this.pluginManager = pluginManager; this.notificationManager = notificationManager; @@ -185,9 +190,9 @@ // setup the standard gitweb-ish urls mount("/repositories", RepositoriesPage.class); - mount("/overview", OverviewPage.class, "r", "h"); + mount("/overview", OverviewPage.class, "r"); mount("/summary", SummaryPage.class, "r"); - mount("/reflog", ReflogPage.class, "r", "h"); + mount("/reflog", ReflogPage.class, "r"); mount("/commits", LogPage.class, "r", "h"); mount("/log", LogPage.class, "r", "h"); mount("/tags", TagsPage.class, "r"); @@ -218,7 +223,7 @@ mount("/mytickets", MyTicketsPage.class, "r", "h"); // setup the markup document urls - mount("/docs", DocsPage.class, "r"); + mount("/docs", DocsPage.class, "r", "h"); mount("/doc", DocPage.class, "r", "h", "f"); // federation urls @@ -246,12 +251,15 @@ } } - // customize the Wicket class resolver to load from plugins + // customize the Wicket class resolver to load from plugins IClassResolver coreResolver = getApplicationSettings().getClassResolver(); - PluginClassResolver classResolver = new PluginClassResolver(coreResolver, pluginManager); - getApplicationSettings().setClassResolver(classResolver); + PluginClassResolver classResolver = new PluginClassResolver(coreResolver, pluginManager); + getApplicationSettings().setClassResolver(classResolver); getMarkupSettings().setDefaultMarkupEncoding("UTF-8"); + + buildAvatarGenerator(); + } /* (non-Javadoc) @@ -265,7 +273,7 @@ if (!settings.getBoolean(Keys.web.mountParameters, true)) { parameters = new String[] {}; } - mount(new GitblitParamUrlCodingStrategy(settings, location, clazz, parameters)); + mount(new GitblitParamUrlCodingStrategy(settings, xssFilter, location, clazz, parameters)); // map the mount point to the cache control definition if (clazz.isAnnotationPresent(CacheControl.class)) { @@ -319,6 +327,14 @@ @Override public IStoredSettings settings() { return settings; + } + + /* (non-Javadoc) + * @see com.gitblit.wicket.Webapp#xssFilter() + */ + @Override + public XssFilter xssFilter() { + return xssFilter; } /* (non-Javadoc) @@ -464,4 +480,30 @@ public static GitBlitWebApp get() { return (GitBlitWebApp) WebApplication.get(); } + + AvatarGenerator generator = null; + @SuppressWarnings("unchecked") + private void buildAvatarGenerator() { + Class<AvatarGenerator> clazz; + try { + clazz = (Class<AvatarGenerator>) getClass().getClassLoader().loadClass(settings.getString(Keys.web.avatarClass, "com.gitblit.GravatarGenerator")); + generator = clazz.newInstance(); + generator.configure(settings); + } catch (ClassNotFoundException | SecurityException | InstantiationException | IllegalAccessException e) { + throw new RuntimeException(e); + } + + } + + public String buildAvatarUrl(String username, String emailaddress, String cssClass, int width, boolean identicon) { + if (width <= 0) { + width = 50; + } + if(generator != null) { + return (String) generator.getURL(username, emailaddress, identicon, width); + } + return null; + } + + } -- Gitblit v1.9.1