From eb96eab513101783a750c13419de6bdce3d2fa4c Mon Sep 17 00:00:00 2001 From: James Moger Date: Tue, 20 Dec 2011 19:35:54 -0500 Subject: Renamed GitblitUserService, sendMail method, sendmail.groovy, and RepositoryModel.mailingLists --- src/com/gitblit/FederationPullExecutor.java | 2 +- src/com/gitblit/GitBlit.java | 22 +- src/com/gitblit/GitblitUserService.java | 217 ++++++++++++++++++++ src/com/gitblit/UserServiceWrapper.java | 221 --------------------- src/com/gitblit/client/EditRepositoryDialog.java | 21 +- src/com/gitblit/models/RepositoryModel.java | 2 +- src/com/gitblit/wicket/GitBlitWebApp.properties | 6 +- .../gitblit/wicket/pages/EditRepositoryPage.html | 22 +- .../gitblit/wicket/pages/EditRepositoryPage.java | 30 ++- src/com/gitblit/wicket/pages/EditTeamPage.html | 4 +- src/com/gitblit/wicket/pages/EditUserPage.html | 8 +- .../gitblit/wicket/panels/RepositoriesPanel.java | 3 +- 12 files changed, 285 insertions(+), 273 deletions(-) create mode 100644 src/com/gitblit/GitblitUserService.java delete mode 100644 src/com/gitblit/UserServiceWrapper.java (limited to 'src') diff --git a/src/com/gitblit/FederationPullExecutor.java b/src/com/gitblit/FederationPullExecutor.java index c3b7d8b8..2976c402 100644 --- a/src/com/gitblit/FederationPullExecutor.java +++ b/src/com/gitblit/FederationPullExecutor.java @@ -113,7 +113,7 @@ public class FederationPullExecutor implements Runnable { String message = "Federation pull of " + registration.name + " @ " + registration.url + " is now at " + is.name(); GitBlit.self() - .sendEmailToAdministrators( + .sendMailToAdministrators( "Pull Status of " + registration.name + " is " + is.name(), message); } diff --git a/src/com/gitblit/GitBlit.java b/src/com/gitblit/GitBlit.java index f0122791..835aa132 100644 --- a/src/com/gitblit/GitBlit.java +++ b/src/com/gitblit/GitBlit.java @@ -743,8 +743,8 @@ public class GitBlit implements ServletContextListener { "gitblit", null, "preReceiveScript"))); model.postReceiveScripts = new ArrayList(Arrays.asList(config.getStringList( "gitblit", null, "postReceiveScript"))); - model.mailRecipients = new ArrayList(Arrays.asList(config.getStringList( - "gitblit", null, "mailRecipient"))); + model.mailingLists = new ArrayList(Arrays.asList(config.getStringList( + "gitblit", null, "mailingList"))); } r.close(); return model; @@ -971,8 +971,8 @@ public class GitBlit implements ServletContextListener { config.setStringList("gitblit", null, "postReceiveScript", repository.postReceiveScripts); } - if (repository.mailRecipients != null) { - config.setStringList("gitblit", null, "mailRecipient", repository.mailRecipients); + if (repository.mailingLists != null) { + config.setStringList("gitblit", null, "mailingList", repository.mailingLists); } try { config.save(); @@ -1485,7 +1485,7 @@ public class GitBlit implements ServletContextListener { * @param subject * @param message */ - public void sendEmailToAdministrators(String subject, String message) { + public void sendMailToAdministrators(String subject, String message) { try { Message mail = mailExecutor.createMessageForAdministrators(); if (mail != null) { @@ -1505,8 +1505,8 @@ public class GitBlit implements ServletContextListener { * @param message * @param toAddresses */ - public void sendEmail(String subject, String message, ArrayList toAddresses) { - this.sendEmail(subject, message, toAddresses.toArray(new String[0])); + public void sendMail(String subject, String message, ArrayList toAddresses) { + this.sendMail(subject, message, toAddresses.toArray(new String[0])); } /** @@ -1516,7 +1516,7 @@ public class GitBlit implements ServletContextListener { * @param message * @param toAddresses */ - public void sendEmail(String subject, String message, String... toAddresses) { + public void sendMail(String subject, String message, String... toAddresses) { try { Message mail = mailExecutor.createMessage(toAddresses); if (mail != null) { @@ -1634,11 +1634,7 @@ public class GitBlit implements ServletContextListener { loginService = (IUserService) realmClass.newInstance(); } } catch (Throwable t) { - loginService = new UserServiceWrapper() { - @Override - public void setupService(IStoredSettings settings) { - } - }; + loginService = new GitblitUserService(); } setUserService(loginService); mailExecutor = new MailExecutor(settings); diff --git a/src/com/gitblit/GitblitUserService.java b/src/com/gitblit/GitblitUserService.java new file mode 100644 index 00000000..97e1a40c --- /dev/null +++ b/src/com/gitblit/GitblitUserService.java @@ -0,0 +1,217 @@ +/* + * Copyright 2011 gitblit.com. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.gitblit; + +import java.io.File; +import java.io.IOException; +import java.text.MessageFormat; +import java.util.List; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.gitblit.models.TeamModel; +import com.gitblit.models.UserModel; + +/** + * This class wraps the default user service and is recommended as the starting + * point for custom user service implementations. + * + * This does seem a little convoluted, but the idea is to allow IUserService to + * evolve with new methods and implementations without breaking custom + * authentication implementations. + * + * The most common implementation of a custom IUserService is to only override + * authentication and then delegate all other functionality to one of Gitblit's + * user services. This class optimizes that use-case. + * + * Extending GitblitUserService allows for authentication customization without + * having to keep-up-with IUSerService API changes. + * + * @author James Moger + * + */ +public class GitblitUserService implements IUserService { + + protected IUserService serviceImpl; + + private final Logger logger = LoggerFactory.getLogger(GitblitUserService.class); + + public GitblitUserService() { + } + + @Override + public void setup(IStoredSettings settings) { + File realmFile = GitBlit.getFileOrFolder(Keys.realm.userService, "users.conf"); + serviceImpl = createUserService(realmFile); + } + + @SuppressWarnings("deprecation") + protected IUserService createUserService(File realmFile) { + IUserService service = null; + if (realmFile.getName().toLowerCase().endsWith(".properties")) { + // v0.5.0 - v0.7.0 properties-based realm file + service = new FileUserService(realmFile); + } else if (realmFile.getName().toLowerCase().endsWith(".conf")) { + // v0.8.0+ config-based realm file + service = new ConfigUserService(realmFile); + } + + assert service != null; + + if (realmFile.exists()) { + // Create the Administrator account for a new realm file + try { + realmFile.createNewFile(); + } catch (IOException x) { + logger.error(MessageFormat.format("COULD NOT CREATE REALM FILE {0}!", realmFile), x); + } + UserModel admin = new UserModel("admin"); + admin.password = "admin"; + admin.canAdmin = true; + admin.excludeFromFederation = true; + service.updateUserModel(admin); + } + + if (service instanceof FileUserService) { + // automatically create a users.conf realm file from the original + // users.properties file + File usersConfig = new File(realmFile.getParentFile(), "users.conf"); + if (!usersConfig.exists()) { + logger.info(MessageFormat.format("Automatically creating {0} based on {1}", + usersConfig.getAbsolutePath(), realmFile.getAbsolutePath())); + ConfigUserService configService = new ConfigUserService(usersConfig); + for (String username : serviceImpl.getAllUsernames()) { + UserModel userModel = serviceImpl.getUserModel(username); + configService.updateUserModel(userModel); + } + } + // issue suggestion about switching to users.conf + logger.warn("Please consider using \"users.conf\" instead of the deprecated \"users.properties\" file"); + } + return service; + } + + @Override + public boolean supportsCookies() { + return serviceImpl.supportsCookies(); + } + + @Override + public char[] getCookie(UserModel model) { + return serviceImpl.getCookie(model); + } + + @Override + public UserModel authenticate(char[] cookie) { + return serviceImpl.authenticate(cookie); + } + + @Override + public UserModel authenticate(String username, char[] password) { + return serviceImpl.authenticate(username, password); + } + + @Override + public UserModel getUserModel(String username) { + return serviceImpl.getUserModel(username); + } + + @Override + public boolean updateUserModel(UserModel model) { + return serviceImpl.updateUserModel(model); + } + + @Override + public boolean updateUserModel(String username, UserModel model) { + return serviceImpl.updateUserModel(username, model); + } + + @Override + public boolean deleteUserModel(UserModel model) { + return serviceImpl.deleteUserModel(model); + } + + @Override + public boolean deleteUser(String username) { + return serviceImpl.deleteUser(username); + } + + @Override + public List getAllUsernames() { + return serviceImpl.getAllUsernames(); + } + + @Override + public List getAllTeamNames() { + return serviceImpl.getAllTeamNames(); + } + + @Override + public List getTeamnamesForRepositoryRole(String role) { + return serviceImpl.getTeamnamesForRepositoryRole(role); + } + + @Override + public boolean setTeamnamesForRepositoryRole(String role, List teamnames) { + return serviceImpl.setTeamnamesForRepositoryRole(role, teamnames); + } + + @Override + public TeamModel getTeamModel(String teamname) { + return serviceImpl.getTeamModel(teamname); + } + + @Override + public boolean updateTeamModel(TeamModel model) { + return serviceImpl.updateTeamModel(model); + } + + @Override + public boolean updateTeamModel(String teamname, TeamModel model) { + return serviceImpl.updateTeamModel(teamname, model); + } + + @Override + public boolean deleteTeamModel(TeamModel model) { + return serviceImpl.deleteTeamModel(model); + } + + @Override + public boolean deleteTeam(String teamname) { + return serviceImpl.deleteTeam(teamname); + } + + @Override + public List getUsernamesForRepositoryRole(String role) { + return serviceImpl.getUsernamesForRepositoryRole(role); + } + + @Override + public boolean setUsernamesForRepositoryRole(String role, List usernames) { + return serviceImpl.setUsernamesForRepositoryRole(role, usernames); + } + + @Override + public boolean renameRepositoryRole(String oldRole, String newRole) { + return serviceImpl.renameRepositoryRole(oldRole, newRole); + } + + @Override + public boolean deleteRepositoryRole(String role) { + return serviceImpl.deleteRepositoryRole(role); + } +} diff --git a/src/com/gitblit/UserServiceWrapper.java b/src/com/gitblit/UserServiceWrapper.java deleted file mode 100644 index 88eab488..00000000 --- a/src/com/gitblit/UserServiceWrapper.java +++ /dev/null @@ -1,221 +0,0 @@ -/* - * Copyright 2011 gitblit.com. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.gitblit; - -import java.io.File; -import java.io.IOException; -import java.text.MessageFormat; -import java.util.List; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import com.gitblit.models.TeamModel; -import com.gitblit.models.UserModel; - -/** - * This class wraps the default user service and is recommended as the starting - * point for custom user service implementations. - * - * This does seem a little convoluted, but the idea is to allow IUserService to - * evolve and be replaced without hampering custom implementations. - * - * The most common need for a custom IUserService is to override authentication - * and then delegate to one of Gitblit's user services. Subclassing this allows - * for authentication customization without having to keep-up-with IUSerService - * API changes. - * - * @author James Moger - * - */ -public abstract class UserServiceWrapper implements IUserService { - - protected IUserService defaultService; - - private final Logger logger = LoggerFactory.getLogger(UserServiceWrapper.class); - - public UserServiceWrapper() { - } - - @SuppressWarnings("deprecation") - @Override - public final void setup(IStoredSettings settings) { - File realmFile = GitBlit.getFileOrFolder(Keys.realm.userService, "users.conf"); - if (realmFile.exists()) { - // load the existing realm file - if (realmFile.getName().toLowerCase().endsWith(".properties")) { - // load the v0.5.0 - v0.7.0 properties-based realm file - defaultService = new FileUserService(realmFile); - - // automatically create a users.conf realm file from the - // original users.properties file - File usersConfig = new File(realmFile.getParentFile(), "users.conf"); - if (!usersConfig.exists()) { - logger.info(MessageFormat.format("Automatically creating {0} based on {1}", - usersConfig.getAbsolutePath(), realmFile.getAbsolutePath())); - ConfigUserService configService = new ConfigUserService(usersConfig); - for (String username : defaultService.getAllUsernames()) { - UserModel userModel = defaultService.getUserModel(username); - configService.updateUserModel(userModel); - } - } - - // issue suggestion about switching to users.conf - logger.warn("Please consider using \"users.conf\" instead of the deprecated \"users.properties\" file"); - } else if (realmFile.getName().toLowerCase().endsWith(".conf")) { - // load the config-based realm file - defaultService = new ConfigUserService(realmFile); - } - } else { - // Create a new realm file and add the default admin - // account. This is necessary for bootstrapping a dynamic - // environment like running on a cloud service. - // As of v0.8.0 the default realm file is ConfigUserService. - try { - realmFile = GitBlit.getFileOrFolder(Keys.realm.userService, "users.conf"); - realmFile.createNewFile(); - defaultService = new ConfigUserService(realmFile); - UserModel admin = new UserModel("admin"); - admin.password = "admin"; - admin.canAdmin = true; - admin.excludeFromFederation = true; - defaultService.updateUserModel(admin); - } catch (IOException x) { - logger.error(MessageFormat.format("COULD NOT CREATE REALM FILE {0}!", realmFile), x); - } - } - - // call subclass setup - setupService(settings); - } - - /** - * Subclasses must implement this method. - * - * @param settings - */ - public abstract void setupService(IStoredSettings settings); - - @Override - public boolean supportsCookies() { - return defaultService.supportsCookies(); - } - - @Override - public char[] getCookie(UserModel model) { - return defaultService.getCookie(model); - } - - @Override - public UserModel authenticate(char[] cookie) { - return defaultService.authenticate(cookie); - } - - @Override - public UserModel authenticate(String username, char[] password) { - return defaultService.authenticate(username, password); - } - - @Override - public UserModel getUserModel(String username) { - return defaultService.getUserModel(username); - } - - @Override - public boolean updateUserModel(UserModel model) { - return defaultService.updateUserModel(model); - } - - @Override - public boolean updateUserModel(String username, UserModel model) { - return defaultService.updateUserModel(username, model); - } - - @Override - public boolean deleteUserModel(UserModel model) { - return defaultService.deleteUserModel(model); - } - - @Override - public boolean deleteUser(String username) { - return defaultService.deleteUser(username); - } - - @Override - public List getAllUsernames() { - return defaultService.getAllUsernames(); - } - - @Override - public List getAllTeamNames() { - return defaultService.getAllTeamNames(); - } - - @Override - public List getTeamnamesForRepositoryRole(String role) { - return defaultService.getTeamnamesForRepositoryRole(role); - } - - @Override - public boolean setTeamnamesForRepositoryRole(String role, List teamnames) { - return defaultService.setTeamnamesForRepositoryRole(role, teamnames); - } - - @Override - public TeamModel getTeamModel(String teamname) { - return defaultService.getTeamModel(teamname); - } - - @Override - public boolean updateTeamModel(TeamModel model) { - return defaultService.updateTeamModel(model); - } - - @Override - public boolean updateTeamModel(String teamname, TeamModel model) { - return defaultService.updateTeamModel(teamname, model); - } - - @Override - public boolean deleteTeamModel(TeamModel model) { - return defaultService.deleteTeamModel(model); - } - - @Override - public boolean deleteTeam(String teamname) { - return defaultService.deleteTeam(teamname); - } - - @Override - public List getUsernamesForRepositoryRole(String role) { - return defaultService.getUsernamesForRepositoryRole(role); - } - - @Override - public boolean setUsernamesForRepositoryRole(String role, List usernames) { - return defaultService.setUsernamesForRepositoryRole(role, usernames); - } - - @Override - public boolean renameRepositoryRole(String oldRole, String newRole) { - return defaultService.renameRepositoryRole(oldRole, newRole); - } - - @Override - public boolean deleteRepositoryRole(String role) { - return defaultService.deleteRepositoryRole(role); - } -} diff --git a/src/com/gitblit/client/EditRepositoryDialog.java b/src/com/gitblit/client/EditRepositoryDialog.java index 44b6fc6a..b7278623 100644 --- a/src/com/gitblit/client/EditRepositoryDialog.java +++ b/src/com/gitblit/client/EditRepositoryDialog.java @@ -89,7 +89,7 @@ public class EditRepositoryDialog extends JDialog { private JCheckBox isFrozen; - private JTextField mailRecipientsField; + private JTextField mailingListsField; private JComboBox accessRestriction; @@ -164,8 +164,8 @@ public class EditRepositoryDialog extends JDialog { anRepository.skipSummaryMetrics); isFrozen = new JCheckBox(Translation.get("gb.isFrozenDescription"), anRepository.isFrozen); - mailRecipientsField = new JTextField(anRepository.mailRecipients == null ? "" - : StringUtils.flattenStrings(anRepository.mailRecipients, " "), 50); + mailingListsField = new JTextField(anRepository.mailingLists == null ? "" + : StringUtils.flattenStrings(anRepository.mailingLists, " "), 50); accessRestriction = new JComboBox(AccessRestrictionType.values()); accessRestriction.setRenderer(new AccessRestrictionRenderer()); @@ -198,7 +198,7 @@ public class EditRepositoryDialog extends JDialog { fieldsPanel .add(newFieldPanel(Translation.get("gb.skipSummaryMetrics"), skipSummaryMetrics)); fieldsPanel.add(newFieldPanel(Translation.get("gb.isFrozen"), isFrozen)); - fieldsPanel.add(newFieldPanel(Translation.get("gb.mailRecipients"), mailRecipientsField)); + fieldsPanel.add(newFieldPanel(Translation.get("gb.mailingLists"), mailingListsField)); usersPalette = new JPalette(); JPanel accessPanel = new JPanel(new BorderLayout(5, 5)); @@ -371,8 +371,17 @@ public class EditRepositoryDialog extends JDialog { repository.skipSummaryMetrics = skipSummaryMetrics.isSelected(); repository.isFrozen = isFrozen.isSelected(); - repository.mailRecipients = StringUtils.getStringsFromValue(mailRecipientsField.getText() - .trim(), " "); + String ml = mailingListsField.getText(); + if (!StringUtils.isEmpty(ml)) { + Set list = new HashSet(); + for (String address : ml.split("(,|\\s)")) { + if (StringUtils.isEmpty(address)) { + continue; + } + list.add(address.toLowerCase()); + } + repository.mailingLists = new ArrayList(list); + } repository.accessRestriction = (AccessRestrictionType) accessRestriction.getSelectedItem(); repository.federationStrategy = (FederationStrategy) federationStrategy.getSelectedItem(); diff --git a/src/com/gitblit/models/RepositoryModel.java b/src/com/gitblit/models/RepositoryModel.java index fc1de8ac..7e33ab06 100644 --- a/src/com/gitblit/models/RepositoryModel.java +++ b/src/com/gitblit/models/RepositoryModel.java @@ -57,7 +57,7 @@ public class RepositoryModel implements Serializable, Comparable preReceiveScripts; public List postReceiveScripts; - public List mailRecipients; + public List mailingLists; public RepositoryModel() { this("", "", "", new Date(0)); diff --git a/src/com/gitblit/wicket/GitBlitWebApp.properties b/src/com/gitblit/wicket/GitBlitWebApp.properties index 4eeb887c..c0b0010d 100644 --- a/src/com/gitblit/wicket/GitBlitWebApp.properties +++ b/src/com/gitblit/wicket/GitBlitWebApp.properties @@ -196,8 +196,8 @@ gb.newTeam = new team gb.permittedTeams = permitted teams gb.emptyRepository = empty repository gb.repositoryUrl = repository url -gb.mailRecipients = mail recipients -gb.mailRecipientsDescription = space-delimited, used by sendemail Groovy hook +gb.mailingLists = mailing lists +gb.mailingListsDescription = used by the sendmail hook gb.preReceiveScripts = pre-receive scripts gb.postReceiveScripts = post-receive scripts -gb.groovyHookScripts = hook scripts \ No newline at end of file +gb.hookScripts = hook scripts \ No newline at end of file diff --git a/src/com/gitblit/wicket/pages/EditRepositoryPage.html b/src/com/gitblit/wicket/pages/EditRepositoryPage.html index 3e221225..310f59e5 100644 --- a/src/com/gitblit/wicket/pages/EditRepositoryPage.html +++ b/src/com/gitblit/wicket/pages/EditRepositoryPage.html @@ -11,18 +11,18 @@ - + - - - - - - - - - + + + + + + + + + @@ -33,7 +33,7 @@ - +

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 
 
diff --git a/src/com/gitblit/wicket/pages/EditRepositoryPage.java b/src/com/gitblit/wicket/pages/EditRepositoryPage.java index 492addc3..f5950539 100644 --- a/src/com/gitblit/wicket/pages/EditRepositoryPage.java +++ b/src/com/gitblit/wicket/pages/EditRepositoryPage.java @@ -19,9 +19,11 @@ import java.text.MessageFormat; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; +import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Map; +import java.util.Set; import org.apache.wicket.PageParameters; import org.apache.wicket.extensions.markup.html.form.palette.Palette; @@ -55,7 +57,7 @@ public class EditRepositoryPage extends RootSubPage { private boolean isAdmin; - private IModel mailRecipients; + private IModel mailingLists; public EditRepositoryPage() { // create constructor @@ -118,7 +120,8 @@ public class EditRepositoryPage extends RootSubPage { } final Palette preReceivePalette = new Palette("preReceiveScripts", new ListModel(preReceiveScripts), new CollectionModel(GitBlit - .self().getAvailableScripts()), new ChoiceRenderer("", ""), 12, true); + .self().getAvailableScripts()), new ChoiceRenderer("", ""), 12, + true); // post-receive palette if (repositoryModel.postReceiveScripts != null) { @@ -126,7 +129,8 @@ public class EditRepositoryPage extends RootSubPage { } final Palette postReceivePalette = new Palette("postReceiveScripts", new ListModel(postReceiveScripts), new CollectionModel(GitBlit - .self().getAvailableScripts()), new ChoiceRenderer("", ""), 12, true); + .self().getAvailableScripts()), new ChoiceRenderer("", ""), 12, + true); CompoundPropertyModel model = new CompoundPropertyModel( repositoryModel); @@ -191,11 +195,17 @@ public class EditRepositoryPage extends RootSubPage { } } - // set mail recipients - String ml = mailRecipients.getObject(); + // set mailing lists + String ml = mailingLists.getObject(); if (!StringUtils.isEmpty(ml)) { - List list = StringUtils.getStringsFromValue(ml.trim(), " "); - repositoryModel.mailRecipients = list; + Set list = new HashSet(); + for (String address : ml.split("(,|\\s)")) { + if (StringUtils.isEmpty(address)) { + continue; + } + list.add(address.toLowerCase()); + } + repositoryModel.mailingLists = new ArrayList(list); } // pre-receive scripts @@ -275,9 +285,9 @@ public class EditRepositoryPage extends RootSubPage { form.add(new CheckBox("showReadme")); form.add(new CheckBox("skipSizeCalculation")); form.add(new CheckBox("skipSummaryMetrics")); - mailRecipients = new Model(repositoryModel.mailRecipients == null ? "" - : StringUtils.flattenStrings(repositoryModel.mailRecipients, " ")); - form.add(new TextField("mailRecipients", mailRecipients)); + mailingLists = new Model(repositoryModel.mailingLists == null ? "" + : StringUtils.flattenStrings(repositoryModel.mailingLists, " ")); + form.add(new TextField("mailingLists", mailingLists)); form.add(usersPalette); form.add(teamsPalette); form.add(federationSetsPalette); diff --git a/src/com/gitblit/wicket/pages/EditTeamPage.html b/src/com/gitblit/wicket/pages/EditTeamPage.html index 84a53e3c..614f0aa1 100644 --- a/src/com/gitblit/wicket/pages/EditTeamPage.html +++ b/src/com/gitblit/wicket/pages/EditTeamPage.html @@ -9,13 +9,13 @@
- + - +


 
 
diff --git a/src/com/gitblit/wicket/pages/EditUserPage.html b/src/com/gitblit/wicket/pages/EditUserPage.html index 978393bb..319a2b65 100644 --- a/src/com/gitblit/wicket/pages/EditUserPage.html +++ b/src/com/gitblit/wicket/pages/EditUserPage.html @@ -9,17 +9,17 @@
- + - - + + - +
 
 
 
 


 
 
diff --git a/src/com/gitblit/wicket/panels/RepositoriesPanel.java b/src/com/gitblit/wicket/panels/RepositoriesPanel.java index fc90316f..118ad6da 100644 --- a/src/com/gitblit/wicket/panels/RepositoriesPanel.java +++ b/src/com/gitblit/wicket/panels/RepositoriesPanel.java @@ -25,6 +25,7 @@ import java.util.Iterator; import java.util.List; import java.util.Map; +import org.apache.wicket.Component; import org.apache.wicket.PageParameters; import org.apache.wicket.extensions.markup.html.repeater.data.sort.OrderByBorder; import org.apache.wicket.extensions.markup.html.repeater.util.SortParam; @@ -157,7 +158,7 @@ public class RepositoriesPanel extends BasePanel { } // repository swatch - Label swatch = new Label("repositorySwatch", " "); + Component swatch = new Label("repositorySwatch", " ").setEscapeModelStrings(false); WicketUtils.setCssBackground(swatch, entry.name); row.add(swatch); swatch.setVisible(showSwatch); -- cgit v1.2.3