From 1ffbccbfbbc456d2e243b56e6d799292cade78fc Mon Sep 17 00:00:00 2001 From: Wadeck Follonier Date: Sun, 16 Oct 2022 22:02:52 +0200 Subject: [PATCH] [JENKINS-69869] Categorize the user properties --- .../java/hudson/model/MyViewsProperty.java | 6 + .../hudson/model/PaneStatusProperties.java | 6 + .../java/hudson/model/TimeZoneProperty.java | 5 + core/src/main/java/hudson/model/User.java | 34 ++++ .../main/java/hudson/model/UserProperty.java | 29 +++ .../hudson/model/UserPropertyDescriptor.java | 54 +++++ .../userproperty/UserPreferencesProperty.java | 92 +++++++++ .../userproperty/UserPropertyCategory.java | 186 ++++++++++++++++++ .../UserPropertyCategoryAccountAction.java | 153 ++++++++++++++ ...serPropertyCategoryExperimentalAction.java | 127 ++++++++++++ ...UserPropertyCategoryPreferencesAction.java | 126 ++++++++++++ .../UserPropertyCategorySecurityAction.java | 127 ++++++++++++ .../hudson/search/UserSearchProperty.java | 5 + .../security/HudsonPrivateSecurityRealm.java | 7 +- .../jenkins/security/ApiTokenProperty.java | 6 + .../LastGrantedAuthoritiesProperty.java | 6 + .../security/seed/UserSeedProperty.java | 6 + .../hudson/model/Messages.properties | 2 + .../hudson/model/User/configure.jelly | 1 + .../hudson/model/User/sidepanel.jelly | 3 +- .../hudson/model/User/sidepanel_fr.properties | 1 + .../model/userproperty/Messages.properties | 44 +++++ .../index.jelly | 72 +++++++ .../index.properties | 25 +++ .../index_bg.properties | 31 +++ .../index_ca.properties | 4 + .../index_cs.properties | 25 +++ .../index_da.properties | 26 +++ .../index_de.properties | 26 +++ .../index_es.properties | 27 +++ .../index_fi.properties | 24 +++ .../index_fr.properties | 26 +++ .../index_hu.properties | 4 + .../index_it.properties | 27 +++ .../index_ja.properties | 26 +++ .../index_ko.properties | 4 + .../index_lv.properties | 25 +++ .../index_nb_NO.properties | 25 +++ .../index_nl.properties | 25 +++ .../index_pl.properties | 27 +++ .../index_pt_BR.properties | 27 +++ .../index_ru.properties | 25 +++ .../index_sk.properties | 4 + .../index_sr.properties | 6 + .../index_sv_SE.properties | 25 +++ .../index_tr.properties | 26 +++ .../index_uk.properties | 4 + .../index_zh_TW.properties | 26 +++ .../index.jelly | 74 +++++++ .../index.properties | 24 +++ .../index.jelly | 74 +++++++ .../index.properties | 24 +++ .../index.jelly | 75 +++++++ .../index.properties | 24 +++ .../main/resources/images/symbols/flask.svg | 2 + 55 files changed, 1913 insertions(+), 2 deletions(-) create mode 100644 core/src/main/java/hudson/model/userproperty/UserPreferencesProperty.java create mode 100644 core/src/main/java/hudson/model/userproperty/UserPropertyCategory.java create mode 100644 core/src/main/java/hudson/model/userproperty/UserPropertyCategoryAccountAction.java create mode 100644 core/src/main/java/hudson/model/userproperty/UserPropertyCategoryExperimentalAction.java create mode 100644 core/src/main/java/hudson/model/userproperty/UserPropertyCategoryPreferencesAction.java create mode 100644 core/src/main/java/hudson/model/userproperty/UserPropertyCategorySecurityAction.java create mode 100644 core/src/main/resources/hudson/model/userproperty/Messages.properties create mode 100644 core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index.jelly create mode 100644 core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index.properties create mode 100644 core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_bg.properties create mode 100644 core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_ca.properties create mode 100644 core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_cs.properties create mode 100644 core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_da.properties create mode 100644 core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_de.properties create mode 100644 core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_es.properties create mode 100644 core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_fi.properties create mode 100644 core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_fr.properties create mode 100644 core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_hu.properties create mode 100644 core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_it.properties create mode 100644 core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_ja.properties create mode 100644 core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_ko.properties create mode 100644 core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_lv.properties create mode 100644 core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_nb_NO.properties create mode 100644 core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_nl.properties create mode 100644 core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_pl.properties create mode 100644 core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_pt_BR.properties create mode 100644 core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_ru.properties create mode 100644 core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_sk.properties create mode 100644 core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_sr.properties create mode 100644 core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_sv_SE.properties create mode 100644 core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_tr.properties create mode 100644 core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_uk.properties create mode 100644 core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_zh_TW.properties create mode 100644 core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryExperimentalAction/index.jelly create mode 100644 core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryExperimentalAction/index.properties create mode 100644 core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryPreferencesAction/index.jelly create mode 100644 core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryPreferencesAction/index.properties create mode 100644 core/src/main/resources/hudson/model/userproperty/UserPropertyCategorySecurityAction/index.jelly create mode 100644 core/src/main/resources/hudson/model/userproperty/UserPropertyCategorySecurityAction/index.properties create mode 100644 war/src/main/resources/images/symbols/flask.svg diff --git a/core/src/main/java/hudson/model/MyViewsProperty.java b/core/src/main/java/hudson/model/MyViewsProperty.java index 9d7b8b651d1cc..71809d788eaeb 100644 --- a/core/src/main/java/hudson/model/MyViewsProperty.java +++ b/core/src/main/java/hudson/model/MyViewsProperty.java @@ -29,6 +29,7 @@ import hudson.Extension; import hudson.Util; import hudson.model.Descriptor.FormException; +import hudson.model.userproperty.UserPropertyCategory; import hudson.security.ACL; import hudson.util.FormValidation; import hudson.views.MyViewsTabBar; @@ -246,6 +247,11 @@ public String getDisplayName() { public UserProperty newInstance(User user) { return new MyViewsProperty(); } + + @Override + public @NonNull UserPropertyCategory getUserPropertyCategory() { + return UserPropertyCategory.get(UserPropertyCategory.Preferences.class); + } } @Override diff --git a/core/src/main/java/hudson/model/PaneStatusProperties.java b/core/src/main/java/hudson/model/PaneStatusProperties.java index 29a460349440e..4807020ca7142 100644 --- a/core/src/main/java/hudson/model/PaneStatusProperties.java +++ b/core/src/main/java/hudson/model/PaneStatusProperties.java @@ -2,7 +2,9 @@ import static java.lang.String.format; +import edu.umd.cs.findbugs.annotations.NonNull; import hudson.Extension; +import hudson.model.userproperty.UserPropertyCategory; import hudson.util.PersistedList; import java.io.IOException; import javax.servlet.http.HttpSession; @@ -56,6 +58,10 @@ public boolean isEnabled() { return false; } + @Override + public @NonNull UserPropertyCategory getUserPropertyCategory() { + return UserPropertyCategory.get(UserPropertyCategory.Invisible.class); + } } private static class PaneStatusPropertiesSessionFallback extends PaneStatusProperties { diff --git a/core/src/main/java/hudson/model/TimeZoneProperty.java b/core/src/main/java/hudson/model/TimeZoneProperty.java index bdf39c58527e8..2675448dad808 100644 --- a/core/src/main/java/hudson/model/TimeZoneProperty.java +++ b/core/src/main/java/hudson/model/TimeZoneProperty.java @@ -4,6 +4,7 @@ import edu.umd.cs.findbugs.annotations.NonNull; import hudson.Extension; import hudson.Util; +import hudson.model.userproperty.UserPropertyCategory; import hudson.util.FormValidation; import hudson.util.ListBoxModel; import hudson.util.ListBoxModel.Option; @@ -106,6 +107,10 @@ public FormValidation doCheckTimeZoneName(@QueryParameter String timeZoneName) { } } + @Override + public @NonNull UserPropertyCategory getUserPropertyCategory() { + return UserPropertyCategory.get(UserPropertyCategory.Account.class); + } } @CheckForNull diff --git a/core/src/main/java/hudson/model/User.java b/core/src/main/java/hudson/model/User.java index 8f9ca606dca91..b3be4e7bb0400 100644 --- a/core/src/main/java/hudson/model/User.java +++ b/core/src/main/java/hudson/model/User.java @@ -41,12 +41,14 @@ import hudson.init.Initializer; import hudson.model.Descriptor.FormException; import hudson.model.listeners.SaveableListener; +import hudson.model.userproperty.UserPreferencesProperty; import hudson.security.ACL; import hudson.security.AccessControlled; import hudson.security.SecurityRealm; import hudson.security.UserMayOrMayNotExistException2; import hudson.util.FormApply; import hudson.util.FormValidation; +import hudson.util.HttpResponses; import hudson.util.RunList; import hudson.util.XStream2; import java.io.File; @@ -336,6 +338,29 @@ public synchronized void addProperty(@NonNull UserProperty p) throws IOException properties = ps; save(); } + + /** + * Expand {@link #addProperty(UserProperty)} for multiple properties to be done at once. + * Expected to be used by the categorized configuration pages to update part of the properties. + * The properties not included in the list will be let untouched. + * It will call the {@link UserProperty#setUser(User)} method and at the end, {@link #save()} once. + * + * @since TODO + */ + public synchronized void addProperties(@NonNull List multipleProperties) throws IOException { + List newProperties = new ArrayList<>(this.properties); + for (UserProperty property : multipleProperties) { + UserProperty oldProp = getProperty(property.getClass()); + if (oldProp != null) { + newProperties.remove(oldProp); + } + newProperties.add(property); + property.setUser(this); + } + + this.properties = newProperties; + this.save(); + } /** * List of all {@link UserProperty}s exposed primarily for the remoting API. @@ -859,6 +884,15 @@ public Api getApi() { */ @POST public void doConfigSubmit(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException, FormException { + // FIXME DRAFT system property + if (true) { + LOGGER.warning(() -> + "Attempt to use the legacy /configSubmit endpoint of user login=" + this.id + + ". The global configuration page has been deprecated in favor of categorized pages. For more details, see JENKINS-69869." + ); + throw HttpResponses.error(400, "The user global configuration page was split into categorized individual pages. See JENKINS-69869."); + } + checkPermission(Jenkins.ADMINISTER); JSONObject json = req.getSubmittedForm(); diff --git a/core/src/main/java/hudson/model/UserProperty.java b/core/src/main/java/hudson/model/UserProperty.java index a9b9dbae7acd9..694679e12e12f 100644 --- a/core/src/main/java/hudson/model/UserProperty.java +++ b/core/src/main/java/hudson/model/UserProperty.java @@ -24,14 +24,21 @@ package hudson.model; +import edu.umd.cs.findbugs.annotations.NonNull; import hudson.DescriptorExtensionList; import hudson.ExtensionPoint; import hudson.model.Descriptor.FormException; +import hudson.model.userproperty.UserPropertyCategory; import jenkins.model.Jenkins; import net.sf.json.JSONObject; import org.kohsuke.stapler.StaplerRequest; import org.kohsuke.stapler.export.ExportedBean; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + /** * Extensible property of {@link User}. * @@ -58,6 +65,10 @@ public abstract class UserProperty implements ReconfigurableDescribable all( return Jenkins.get().getDescriptorList(UserProperty.class); } + /** + * Returns all the registered {@link UserPropertyCategory} descriptors for a given category. + * + * @since TODO + */ + public static List allByCategoryClass(@NonNull Class categoryClass) { + DescriptorExtensionList all = all(); + + List onlyForTheCategory = new ArrayList<>(all.size()); + for (UserPropertyDescriptor descriptor : all) { + if (descriptor.getUserPropertyCategory().getClass().equals(categoryClass)) { + onlyForTheCategory.add(descriptor); + } + } + + return onlyForTheCategory; + } + @Override public UserProperty reconfigure(StaplerRequest req, JSONObject form) throws FormException { return form == null ? null : getDescriptor().newInstance(req, form); diff --git a/core/src/main/java/hudson/model/UserPropertyDescriptor.java b/core/src/main/java/hudson/model/UserPropertyDescriptor.java index 22e05ea59afff..34652d2e7c34a 100644 --- a/core/src/main/java/hudson/model/UserPropertyDescriptor.java +++ b/core/src/main/java/hudson/model/UserPropertyDescriptor.java @@ -24,6 +24,13 @@ package hudson.model; +import edu.umd.cs.findbugs.annotations.CheckForNull; +import edu.umd.cs.findbugs.annotations.NonNull; +import hudson.model.userproperty.UserPropertyCategory; +import org.jenkinsci.Symbol; + +import java.util.Optional; + /** * {@link Descriptor} for {@link UserProperty}. * @@ -73,4 +80,51 @@ protected UserPropertyDescriptor() { public boolean isEnabled() { return true; } + + /** + * Define the category for this user property descriptor. + * + * @return never null, always the same value for a given instance of {@link Descriptor}. + * + * @since TODO + */ + public @NonNull UserPropertyCategory getUserPropertyCategory() { + // As this method is expected to be overloaded by subclasses + // the logic here is just done to support plugins with older core version + String categoryAsString = this.getUserPropertyCategoryAsString(); + if (categoryAsString != null) { + Optional firstIfFound = UserPropertyCategory.all().stream() + .filter(cat -> { + Symbol symbolAnnotation = cat.getClass().getAnnotation(Symbol.class); + if (symbolAnnotation != null) { + for (String symbolValue : symbolAnnotation.value()) { + if (symbolValue.equalsIgnoreCase(categoryAsString)) { + return true; + } + } + } + return false; + }) + .findFirst(); + if (firstIfFound.isPresent()) { + return firstIfFound.get(); + } + } + return UserPropertyCategory.get(UserPropertyCategory.Unclassified.class); + } + + /** + * Method proposed to prevent plugins to rely on too recent core version + * while keeping the possibility to use the categories. + * + * @deprecated This should only be used when the core requirement is below the version this method was added + * + * @return String name corresponding to the symbol of {@link #getUserPropertyCategory()} + * + * @since TODO + */ + @Deprecated + protected @CheckForNull String getUserPropertyCategoryAsString() { + return null; + } } diff --git a/core/src/main/java/hudson/model/userproperty/UserPreferencesProperty.java b/core/src/main/java/hudson/model/userproperty/UserPreferencesProperty.java new file mode 100644 index 0000000000000..cd92ba46cc861 --- /dev/null +++ b/core/src/main/java/hudson/model/userproperty/UserPreferencesProperty.java @@ -0,0 +1,92 @@ +/* + * The MIT License + * + * Copyright (c) 2022, CloudBees, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +package hudson.model.userproperty; + +import edu.umd.cs.findbugs.annotations.NonNull; +import hudson.ExtensionPoint; +import hudson.model.Messages; +import hudson.model.User; +import hudson.model.UserProperty; +import hudson.model.UserPropertyDescriptor; +import jenkins.model.Jenkins; +import org.jenkinsci.Symbol; +import org.kohsuke.stapler.export.ExportedBean; + +import java.util.Map; + +//TODO DRAFT experimental to split +/** + * Property of {@link User} responsible to store their preferences. + * + * TODO rest of the javadoc + * + * @since TODO + */ +@ExportedBean +public class UserPreferencesProperty extends UserProperty { + + private Map preferences; + + + + // descriptor must be of the UserPropertyDescriptor type + @Override + public UserPropertyDescriptor getDescriptor() { + return (UserPropertyDescriptor) Jenkins.get().getDescriptorOrDie(getClass()); + } + + public static class UserPreference implements ExtensionPoint { + public UserPreferenceKey getKey(){ + return null; + } + public UserPreferenceValue getValue(){ + return null; + } + } + + public static class UserPreferenceKey { + + } + + public static class UserPreferenceValue { + + } + +// @Extension + @Symbol("preferences") + public static class DescriptorImpl extends UserPropertyDescriptor { + + @NonNull + @Override + public String getDisplayName() { + return Messages.UserPreferencesProperty_DisplayName(); + } + + @Override + public UserProperty newInstance(User user) { + return new UserPreferencesProperty(); + } + } +} diff --git a/core/src/main/java/hudson/model/userproperty/UserPropertyCategory.java b/core/src/main/java/hudson/model/userproperty/UserPropertyCategory.java new file mode 100644 index 0000000000000..428b640919a58 --- /dev/null +++ b/core/src/main/java/hudson/model/userproperty/UserPropertyCategory.java @@ -0,0 +1,186 @@ +/* + * The MIT License + * + * Copyright (c) 2022, CloudBees, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +package hudson.model.userproperty; + +import edu.umd.cs.findbugs.annotations.NonNull; +import hudson.Extension; +import hudson.ExtensionList; +import hudson.ExtensionPoint; +import hudson.model.ModelObject; +import hudson.model.UserProperty; +import hudson.model.UserPropertyDescriptor; +import org.jenkinsci.Symbol; +import org.kohsuke.accmod.Restricted; +import org.kohsuke.accmod.restrictions.DoNotUse; + +/** + * Grouping of related {@link UserProperty}s. + * + *

+ * To facilitate the separation of the user properties into multiple pages, tabs, and so on, + * {@link UserProperty}s are classified into categories (such as "security", "preferences", as well + * as the catch all "unclassified".) Categories themselves are extensible — plugins may introduce + * its own category as well, although that should only happen if you are creating a big enough subsystem. + * + *

+ * The primary purpose of this is to enable future UIs to split the global configurations to + * smaller pieces that can be individually looked at and updated. + * + * @since TODO + * @see UserProperty + */ +public abstract class UserPropertyCategory implements ExtensionPoint, ModelObject { + /** + * One-line plain text message that explains what this category is about. + * This can be used in the UI to help the user pick the right category. + * + * The text should be longer than {@link #getDisplayName()} + */ + public abstract String getShortDescription(); + + /** + * Returns all the registered {@link UserPropertyCategory} descriptors. + */ + public static ExtensionList all() { + return ExtensionList.lookup(UserPropertyCategory.class); + } + + public static @NonNull T get(Class type) { + T category = all().get(type); if (category == null) { + throw new AssertionError("Category not found. It seems the " + type + " is not annotated with @Extension and so not registered"); + } return category; + } + + /** + * This category is used when the {@link hudson.model.UserPropertyDescriptor} has not implemented + * the {@link UserPropertyDescriptor#getUserPropertyCategory()} method + * (or the getUserPropertyCategoryAsString method for compatibility reason). + * + * If you do not know what to use, choose the {@link Account} instead of this one. + */ + @Extension + @Symbol("unclassified") + @Restricted(DoNotUse.class) + public static class Unclassified extends UserPropertyCategory { + @Override + public String getDisplayName() { + return Messages.UserPropertyCategory_Unclassified_DisplayName(); + } + + @Override + public String getShortDescription() { + return Messages.UserPropertyCategory_Unclassified_ShortDescription(); + } + } + + /** + * User property related to account settings (e.g. timezone, email, ...). + * + * It could be seen as the default choice for {@link UserProperty} that are defining their category. + * Currently it has the same effect as {@link Unclassified} but the behavior could change in the future. + */ + @Extension + @Symbol("account") + public static class Account extends UserPropertyCategory { + @Override + public String getDisplayName() { + return Messages.UserPropertyCategory_Account_DisplayName(); + } + + @Override + public String getShortDescription() { + return Messages.UserPropertyCategory_Account_ShortDescription(); + } + } + + /** + * Preferences related configurations (e.g. notification type, default view, ...). + */ + @Extension + @Symbol("preferences") + public static class Preferences extends UserPropertyCategory { + @Override + public String getDisplayName() { + return Messages.UserPropertyCategory_Preferences_DisplayName(); + } + + @Override + public String getShortDescription() { + return Messages.UserPropertyCategory_Preferences_ShortDescription(); + } + } + + /** + * Per user feature flags (e.g. new design, ...). + */ + @Extension + @Symbol("experimental") + public static class Experimental extends UserPropertyCategory { + @Override + public String getDisplayName() { + return Messages.UserPropertyCategory_Experimental_DisplayName(); + } + + @Override + public String getShortDescription() { + return Messages.UserPropertyCategory_Experimental_ShortDescription(); + } + } + + /** + * Security related configurations (e.g. API Token, SSH keys, ...). + * With this separation, we can more easily add control on their modifications. + */ + @Extension + @Symbol("security") + public static class Security extends UserPropertyCategory { + @Override + public String getDisplayName() { + return Messages.UserPropertyCategory_Security_DisplayName(); + } + + @Override + public String getShortDescription() { + return Messages.UserPropertyCategory_Security_ShortDescription(); + } + } + + /** + * For user properties that are not expected to be displayed, + * typically automatically configured by automated behavior, without direct user interaction. + */ + @Extension + @Symbol("invisible") + public static class Invisible extends UserPropertyCategory { + @Override + public String getDisplayName() { + return Messages.UserPropertyCategory_Invisible_DisplayName(); + } + + @Override + public String getShortDescription() { + return Messages.UserPropertyCategory_Invisible_ShortDescription(); + } + } +} \ No newline at end of file diff --git a/core/src/main/java/hudson/model/userproperty/UserPropertyCategoryAccountAction.java b/core/src/main/java/hudson/model/userproperty/UserPropertyCategoryAccountAction.java new file mode 100644 index 0000000000000..69acd9ec92d18 --- /dev/null +++ b/core/src/main/java/hudson/model/userproperty/UserPropertyCategoryAccountAction.java @@ -0,0 +1,153 @@ +/* + * The MIT License + * + * Copyright (c) 2022, CloudBees, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +package hudson.model.userproperty; + +import edu.umd.cs.findbugs.annotations.NonNull; +import hudson.DescriptorExtensionList; +import hudson.Extension; +import hudson.model.Action; +import hudson.model.Descriptor; +import hudson.model.TransientUserActionFactory; +import hudson.model.User; +import hudson.model.UserProperty; +import hudson.model.UserPropertyDescriptor; +import hudson.util.FormApply; +import jenkins.model.Jenkins; +import jenkins.security.UserDetailsCache; +import net.sf.json.JSONObject; +import org.jenkinsci.Symbol; +import org.kohsuke.accmod.Restricted; +import org.kohsuke.accmod.restrictions.NoExternalUse; +import org.kohsuke.stapler.StaplerRequest; +import org.kohsuke.stapler.StaplerResponse; +import org.kohsuke.stapler.verb.POST; + +import javax.servlet.ServletException; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.List; + +@Restricted(NoExternalUse.class) +public class UserPropertyCategoryAccountAction implements Action { + private final @NonNull User targetUser; + + public UserPropertyCategoryAccountAction(@NonNull User user) { + this.targetUser = user; + } + + @SuppressWarnings("unused") // Jelly use + public @NonNull User getTargetUser() { + return targetUser; + } + + @Override + public String getDisplayName() { + return Messages.UserPropertyCategoryAccountAction_DisplayName(); + } + + @Override + public String getIconFileName() { + return "symbol-settings"; + } + + @Override + public String getUrlName() { + return "account"; + } + + public @NonNull List getMyCategoryDescriptors() { + return allByTwoCategoryClasses(UserPropertyCategory.Unclassified.class, UserPropertyCategory.Account.class); + } + + private static List allByTwoCategoryClasses( + @NonNull Class categoryClass1, + @NonNull Class categoryClass2 + ) { + DescriptorExtensionList all = UserProperty.all(); + + List filteredList = new ArrayList<>(all.size()); + for (UserPropertyDescriptor descriptor : all) { + Class currClass = descriptor.getUserPropertyCategory().getClass(); + if (currClass.equals(categoryClass1) || currClass.equals(categoryClass2)) { + filteredList.add(descriptor); + } + } + + return filteredList; + } + + @POST + public void doAccountConfigSubmit(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException, Descriptor.FormException { + this.targetUser.checkPermission(Jenkins.ADMINISTER); + + JSONObject json = req.getSubmittedForm(); + + String oldFullName = this.targetUser.getFullName(); + this.targetUser.setFullName(json.getString("fullName")); + this.targetUser.setDescription(json.getString("description")); + + List props = new ArrayList<>(); + List myCategoryDescriptors = getMyCategoryDescriptors(); + int i = 0; + for (UserPropertyDescriptor d : myCategoryDescriptors) { + UserProperty p = this.targetUser.getProperty(d.clazz); + + JSONObject o = json.optJSONObject("userProperty" + i++); + if (o != null) { + if (p != null) { + p = p.reconfigure(req, o); + } else { + p = d.newInstance(req, o); + } + } + + if (p != null) { + props.add(p); + } + } + this.targetUser.addProperties(props); + + this.targetUser.save(); + + if (oldFullName != null && !oldFullName.equals(this.targetUser.getFullName())) { + UserDetailsCache.get().invalidate(oldFullName); + } + + // we are in /user//account/, going to /user// + FormApply.success("..").generateResponse(req, rsp, this); + } + + /** + * Inject the outer class configuration page into the sidenav and the request routing of the user + */ + @Extension(ordinal = 400) + @Symbol("account") + public static class AccountActionFactory extends TransientUserActionFactory { + public Collection createFor(User target) { + return Collections.singleton(new UserPropertyCategoryAccountAction(target)); + } + } +} diff --git a/core/src/main/java/hudson/model/userproperty/UserPropertyCategoryExperimentalAction.java b/core/src/main/java/hudson/model/userproperty/UserPropertyCategoryExperimentalAction.java new file mode 100644 index 0000000000000..1d443863061d6 --- /dev/null +++ b/core/src/main/java/hudson/model/userproperty/UserPropertyCategoryExperimentalAction.java @@ -0,0 +1,127 @@ +/* + * The MIT License + * + * Copyright (c) 2022, CloudBees, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +package hudson.model.userproperty; + +import edu.umd.cs.findbugs.annotations.NonNull; +import hudson.Extension; +import hudson.model.Action; +import hudson.model.Descriptor; +import hudson.model.TransientUserActionFactory; +import hudson.model.User; +import hudson.model.UserProperty; +import hudson.model.UserPropertyDescriptor; +import hudson.util.FormApply; +import jenkins.model.Jenkins; +import net.sf.json.JSONObject; +import org.jenkinsci.Symbol; +import org.kohsuke.accmod.Restricted; +import org.kohsuke.accmod.restrictions.NoExternalUse; +import org.kohsuke.stapler.StaplerRequest; +import org.kohsuke.stapler.StaplerResponse; +import org.kohsuke.stapler.verb.POST; + +import javax.servlet.ServletException; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.List; + +//TODO DRAFT experimental to split +@Restricted(NoExternalUse.class) +public class UserPropertyCategoryExperimentalAction implements Action { + private final @NonNull User targetUser; + + public UserPropertyCategoryExperimentalAction(@NonNull User user) { + this.targetUser = user; + } + + @SuppressWarnings("unused") // Jelly use + public @NonNull User getTargetUser() { + return targetUser; + } + + @Override + public String getDisplayName() { + return Messages.UserPropertyCategoryExperimentalAction_DisplayName(); + } + + @Override + public String getIconFileName() { + return "symbol-flask"; + } + + @Override + public String getUrlName() { + return "experimental"; + } + + public @NonNull List getMyCategoryDescriptors() { + return UserProperty.allByCategoryClass(UserPropertyCategory.Experimental.class); + } + + @POST + public void doExperimentalConfigSubmit(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException, Descriptor.FormException { + this.targetUser.checkPermission(Jenkins.ADMINISTER); + + JSONObject json = req.getSubmittedForm(); + + List props = new ArrayList<>(); + List myCategoryDescriptors = getMyCategoryDescriptors(); + int i = 0; + for (UserPropertyDescriptor d : myCategoryDescriptors) { + UserProperty p = this.targetUser.getProperty(d.clazz); + + JSONObject o = json.optJSONObject("userProperty" + i++); + if (o != null) { + if (p != null) { + p = p.reconfigure(req, o); + } else { + p = d.newInstance(req, o); + } + } + + if (p != null) { + props.add(p); + } + } + this.targetUser.addProperties(props); + + this.targetUser.save(); + + // we are in /user//experimental/, going to /user// + FormApply.success("..").generateResponse(req, rsp, this); + } + + /** + * Inject the outer class configuration page into the sidenav and the request routing of the user + */ + @Extension(ordinal = 100) + @Symbol("experimental") + public static class ExperimentalActionFactory extends TransientUserActionFactory { + public Collection createFor(User target) { + return Collections.singleton(new UserPropertyCategoryExperimentalAction(target)); + } + } +} diff --git a/core/src/main/java/hudson/model/userproperty/UserPropertyCategoryPreferencesAction.java b/core/src/main/java/hudson/model/userproperty/UserPropertyCategoryPreferencesAction.java new file mode 100644 index 0000000000000..7061ab615e514 --- /dev/null +++ b/core/src/main/java/hudson/model/userproperty/UserPropertyCategoryPreferencesAction.java @@ -0,0 +1,126 @@ +/* + * The MIT License + * + * Copyright (c) 2022, CloudBees, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +package hudson.model.userproperty; + +import edu.umd.cs.findbugs.annotations.NonNull; +import hudson.Extension; +import hudson.model.Action; +import hudson.model.Descriptor; +import hudson.model.TransientUserActionFactory; +import hudson.model.User; +import hudson.model.UserProperty; +import hudson.model.UserPropertyDescriptor; +import hudson.util.FormApply; +import jenkins.model.Jenkins; +import net.sf.json.JSONObject; +import org.jenkinsci.Symbol; +import org.kohsuke.accmod.Restricted; +import org.kohsuke.accmod.restrictions.NoExternalUse; +import org.kohsuke.stapler.StaplerRequest; +import org.kohsuke.stapler.StaplerResponse; +import org.kohsuke.stapler.verb.POST; + +import javax.servlet.ServletException; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.List; + +@Restricted(NoExternalUse.class) +public class UserPropertyCategoryPreferencesAction implements Action { + private final @NonNull User targetUser; + + public UserPropertyCategoryPreferencesAction(@NonNull User user) { + this.targetUser = user; + } + + @SuppressWarnings("unused") // Jelly use + public @NonNull User getTargetUser() { + return targetUser; + } + + @Override + public String getDisplayName() { + return Messages.UserPropertyCategoryPreferencesAction_DisplayName(); + } + + @Override + public String getIconFileName() { + return "symbol-parameters"; + } + + @Override + public String getUrlName() { + return "preferences"; + } + + public @NonNull List getMyCategoryDescriptors() { + return UserProperty.allByCategoryClass(UserPropertyCategory.Preferences.class); + } + + @POST + public void doPreferencesConfigSubmit(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException, Descriptor.FormException { + this.targetUser.checkPermission(Jenkins.ADMINISTER); + + JSONObject json = req.getSubmittedForm(); + + List props = new ArrayList<>(); + List myCategoryDescriptors = getMyCategoryDescriptors(); + int i = 0; + for (UserPropertyDescriptor d : myCategoryDescriptors) { + UserProperty p = this.targetUser.getProperty(d.clazz); + + JSONObject o = json.optJSONObject("userProperty" + i++); + if (o != null) { + if (p != null) { + p = p.reconfigure(req, o); + } else { + p = d.newInstance(req, o); + } + } + + if (p != null) { + props.add(p); + } + } + this.targetUser.addProperties(props); + + this.targetUser.save(); + + // we are in /user//experimental/, going to /user// + FormApply.success("..").generateResponse(req, rsp, this); + } + + /** + * Inject the outer class configuration page into the sidenav and the request routing of the user + */ + @Extension(ordinal = 300) + @Symbol("preferences") + public static class PreferencesActionFactory extends TransientUserActionFactory { + public Collection createFor(User target) { + return Collections.singleton(new UserPropertyCategoryPreferencesAction(target)); + } + } +} diff --git a/core/src/main/java/hudson/model/userproperty/UserPropertyCategorySecurityAction.java b/core/src/main/java/hudson/model/userproperty/UserPropertyCategorySecurityAction.java new file mode 100644 index 0000000000000..ed6188c61f3d0 --- /dev/null +++ b/core/src/main/java/hudson/model/userproperty/UserPropertyCategorySecurityAction.java @@ -0,0 +1,127 @@ +/* + * The MIT License + * + * Copyright (c) 2022, CloudBees, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +package hudson.model.userproperty; + + +import edu.umd.cs.findbugs.annotations.NonNull; +import hudson.Extension; +import hudson.model.Action; +import hudson.model.Descriptor; +import hudson.model.TransientUserActionFactory; +import hudson.model.User; +import hudson.model.UserProperty; +import hudson.model.UserPropertyDescriptor; +import hudson.util.FormApply; +import jenkins.model.Jenkins; +import net.sf.json.JSONObject; +import org.jenkinsci.Symbol; +import org.kohsuke.accmod.Restricted; +import org.kohsuke.accmod.restrictions.NoExternalUse; +import org.kohsuke.stapler.StaplerRequest; +import org.kohsuke.stapler.StaplerResponse; +import org.kohsuke.stapler.verb.POST; + +import javax.servlet.ServletException; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.List; + +@Restricted(NoExternalUse.class) +public class UserPropertyCategorySecurityAction implements Action { + private final @NonNull User targetUser; + + public UserPropertyCategorySecurityAction(@NonNull User user) { + this.targetUser = user; + } + + @SuppressWarnings("unused") // Jelly use + public @NonNull User getTargetUser() { + return targetUser; + } + + @Override + public String getDisplayName() { + return Messages.UserPropertyCategorySecurityAction_DisplayName(); + } + + @Override + public String getIconFileName() { + return "symbol-lock-closed"; + } + + @Override + public String getUrlName() { + return "security"; + } + + public @NonNull List getMyCategoryDescriptors() { + return UserProperty.allByCategoryClass(UserPropertyCategory.Security.class); + } + + @POST + public void doSecurityConfigSubmit(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException, Descriptor.FormException { + this.targetUser.checkPermission(Jenkins.ADMINISTER); + + JSONObject json = req.getSubmittedForm(); + + List props = new ArrayList<>(); + List myCategoryDescriptors = getMyCategoryDescriptors(); + int i = 0; + for (UserPropertyDescriptor d : myCategoryDescriptors) { + UserProperty p = this.targetUser.getProperty(d.clazz); + + JSONObject o = json.optJSONObject("userProperty" + i++); + if (o != null) { + if (p != null) { + p = p.reconfigure(req, o); + } else { + p = d.newInstance(req, o); + } + } + + if (p != null) { + props.add(p); + } + } + this.targetUser.addProperties(props); + + this.targetUser.save(); + + // we are in /user//security/, going to /user// + FormApply.success("..").generateResponse(req, rsp, this); + } + + /** + * Inject the outer class configuration page into the sidenav and the request routing of the user + */ + @Extension(ordinal = 200) + @Symbol("security") + public static class SecurityActionFactory extends TransientUserActionFactory { + public Collection createFor(User target) { + return Collections.singleton(new UserPropertyCategorySecurityAction(target)); + } + } +} diff --git a/core/src/main/java/hudson/search/UserSearchProperty.java b/core/src/main/java/hudson/search/UserSearchProperty.java index 7e9836944c0ba..a3515dd088742 100644 --- a/core/src/main/java/hudson/search/UserSearchProperty.java +++ b/core/src/main/java/hudson/search/UserSearchProperty.java @@ -5,6 +5,7 @@ import hudson.model.User; import hudson.model.UserProperty; import hudson.model.UserPropertyDescriptor; +import hudson.model.userproperty.UserPropertyCategory; import net.sf.json.JSONObject; import org.jenkinsci.Symbol; import org.kohsuke.stapler.StaplerRequest; @@ -54,6 +55,10 @@ public UserProperty newInstance(StaplerRequest req, JSONObject formData) throws return new UserSearchProperty(formData.optBoolean("insensitiveSearch")); } + @Override + public @NonNull UserPropertyCategory getUserPropertyCategory() { + return UserPropertyCategory.get(UserPropertyCategory.Preferences.class); + } } } diff --git a/core/src/main/java/hudson/security/HudsonPrivateSecurityRealm.java b/core/src/main/java/hudson/security/HudsonPrivateSecurityRealm.java index d25b01c02035e..27b2d6948d74f 100644 --- a/core/src/main/java/hudson/security/HudsonPrivateSecurityRealm.java +++ b/core/src/main/java/hudson/security/HudsonPrivateSecurityRealm.java @@ -39,6 +39,7 @@ import hudson.model.User; import hudson.model.UserProperty; import hudson.model.UserPropertyDescriptor; +import hudson.model.userproperty.UserPropertyCategory; import hudson.security.FederatedLoginService.FederatedIdentity; import hudson.security.captcha.CaptchaSupport; import hudson.util.FormValidation; @@ -761,7 +762,6 @@ public boolean equals(Object o) { public int hashCode() { return getUsername().hashCode(); } - } public static class ConverterImpl extends XStream2.PassthruConverter

{ @@ -844,6 +844,11 @@ public boolean isEnabled() { public UserProperty newInstance(User user) { return null; } + + @Override + public @NonNull UserPropertyCategory getUserPropertyCategory() { + return UserPropertyCategory.get(UserPropertyCategory.Security.class); + } } } diff --git a/core/src/main/java/jenkins/security/ApiTokenProperty.java b/core/src/main/java/jenkins/security/ApiTokenProperty.java index 3e200b25fa2f6..9106830ace927 100644 --- a/core/src/main/java/jenkins/security/ApiTokenProperty.java +++ b/core/src/main/java/jenkins/security/ApiTokenProperty.java @@ -32,6 +32,7 @@ import hudson.model.Descriptor.FormException; import hudson.model.User; import hudson.model.UserProperty; +import hudson.model.userproperty.UserPropertyCategory; import hudson.model.UserPropertyDescriptor; import hudson.security.ACL; import hudson.util.HttpResponses; @@ -658,6 +659,11 @@ public HttpResponse doRevokeAllExcept(@AncestorInPath User u, return HttpResponses.ok(); } + + @Override + public @NonNull UserPropertyCategory getUserPropertyCategory() { + return UserPropertyCategory.get(UserPropertyCategory.Security.class); + } } /** diff --git a/core/src/main/java/jenkins/security/LastGrantedAuthoritiesProperty.java b/core/src/main/java/jenkins/security/LastGrantedAuthoritiesProperty.java index 52f74d452ffac..cb8b8accf2951 100644 --- a/core/src/main/java/jenkins/security/LastGrantedAuthoritiesProperty.java +++ b/core/src/main/java/jenkins/security/LastGrantedAuthoritiesProperty.java @@ -6,6 +6,7 @@ import hudson.model.User; import hudson.model.UserProperty; import hudson.model.UserPropertyDescriptor; +import hudson.model.userproperty.UserPropertyCategory; import hudson.security.SecurityRealm; import java.io.IOException; import java.util.ArrayList; @@ -171,6 +172,11 @@ public boolean isEnabled() { public UserProperty newInstance(User user) { return null; } + + @Override + public @NonNull UserPropertyCategory getUserPropertyCategory() { + return UserPropertyCategory.get(UserPropertyCategory.Invisible.class); + } } private static final Logger LOGGER = Logger.getLogger(LastGrantedAuthoritiesProperty.class.getName()); diff --git a/core/src/main/java/jenkins/security/seed/UserSeedProperty.java b/core/src/main/java/jenkins/security/seed/UserSeedProperty.java index d7420910cb64c..e323d87932f49 100644 --- a/core/src/main/java/jenkins/security/seed/UserSeedProperty.java +++ b/core/src/main/java/jenkins/security/seed/UserSeedProperty.java @@ -30,6 +30,7 @@ import hudson.Extension; import hudson.model.User; import hudson.model.UserProperty; +import hudson.model.userproperty.UserPropertyCategory; import hudson.model.UserPropertyDescriptor; import hudson.util.HttpResponses; import java.io.IOException; @@ -153,5 +154,10 @@ public synchronized HttpResponse doRenewSessionSeed(@AncestorInPath @NonNull Use public boolean isEnabled() { return !DISABLE_USER_SEED && !HIDE_USER_SEED_SECTION; } + + @Override + public @NonNull UserPropertyCategory getUserPropertyCategory() { + return UserPropertyCategory.get(UserPropertyCategory.Security.class); + } } } diff --git a/core/src/main/resources/hudson/model/Messages.properties b/core/src/main/resources/hudson/model/Messages.properties index a14216ffe0f8c..ebe24bd8172f9 100644 --- a/core/src/main/resources/hudson/model/Messages.properties +++ b/core/src/main/resources/hudson/model/Messages.properties @@ -421,3 +421,5 @@ ManagementLink.Category.MISC=Other ManagementLink.Category.UNCATEGORIZED=Uncategorized FileParameterValue.IndexTitle=File Parameters + +UserPreferencesProperty.DisplayName=Preferences diff --git a/core/src/main/resources/hudson/model/User/configure.jelly b/core/src/main/resources/hudson/model/User/configure.jelly index 0909cedd383e0..888d24e6b7f92 100644 --- a/core/src/main/resources/hudson/model/User/configure.jelly +++ b/core/src/main/resources/hudson/model/User/configure.jelly @@ -25,6 +25,7 @@ THE SOFTWARE. + diff --git a/core/src/main/resources/hudson/model/User/sidepanel.jelly b/core/src/main/resources/hudson/model/User/sidepanel.jelly index c92a0f5f228c5..d34062b3a98c5 100644 --- a/core/src/main/resources/hudson/model/User/sidepanel.jelly +++ b/core/src/main/resources/hudson/model/User/sidepanel.jelly @@ -34,7 +34,8 @@ THE SOFTWARE. - + + diff --git a/core/src/main/resources/hudson/model/User/sidepanel_fr.properties b/core/src/main/resources/hudson/model/User/sidepanel_fr.properties index 26fd838834dd8..9870e52d39ede 100644 --- a/core/src/main/resources/hudson/model/User/sidepanel_fr.properties +++ b/core/src/main/resources/hudson/model/User/sidepanel_fr.properties @@ -26,3 +26,4 @@ My\ Views=Mes Vues Status=Statut Builds=Constructions Configure=Configurer +Preferences=Préférences diff --git a/core/src/main/resources/hudson/model/userproperty/Messages.properties b/core/src/main/resources/hudson/model/userproperty/Messages.properties new file mode 100644 index 0000000000000..b0d4ea87b0bc0 --- /dev/null +++ b/core/src/main/resources/hudson/model/userproperty/Messages.properties @@ -0,0 +1,44 @@ +# The MIT License +# +# Copyright (c) 2022, CloudBees, Inc. +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. + +UserPropertyCategory.Unclassified.DisplayName=Unclassified +UserPropertyCategory.Unclassified.ShortDescription=User properties without a category yet + +UserPropertyCategory.Account.DisplayName=Account settings +UserPropertyCategory.Account.ShortDescription=User properties related to the user account configuration (e.g. timezone, email, ...) + +UserPropertyCategory.Preferences.DisplayName=Preferences +UserPropertyCategory.Preferences.ShortDescription=User properties related to the user preferences (e.g. notification type, default view, ...) + +UserPropertyCategory.Experimental.DisplayName=Experimental flags +UserPropertyCategory.Experimental.ShortDescription=Per user flags to enable/disable experimental features (e.g. new design, ...) + +UserPropertyCategory.Security.DisplayName=Security +UserPropertyCategory.Security.ShortDescription=User properties related to the security of the user account (e.g. API token, SSH keys, ...) + +UserPropertyCategory.Invisible.DisplayName=Invisible +UserPropertyCategory.Invisible.ShortDescription=User properties that do not require a configuration page + +UserPropertyCategoryAccountAction.DisplayName=Account settings +UserPropertyCategoryExperimentalAction.DisplayName=Experimental flags +UserPropertyCategoryPreferencesAction.DisplayName=Preferences +UserPropertyCategorySecurityAction.DisplayName=Security diff --git a/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index.jelly b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index.jelly new file mode 100644 index 0000000000000..2ab9bb0158fe8 --- /dev/null +++ b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index.jelly @@ -0,0 +1,72 @@ + + + + + + + + + +

+ ${%title(it.targetUser.fullName)} +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
diff --git a/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index.properties b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index.properties new file mode 100644 index 0000000000000..7b0b3046473f0 --- /dev/null +++ b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index.properties @@ -0,0 +1,25 @@ +# The MIT License +# +# Copyright (c) 2022, CloudBees, Inc. +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. + +title=Account settings for ‘{0}’ +Full\ name=Full Name +Description=Description diff --git a/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_bg.properties b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_bg.properties new file mode 100644 index 0000000000000..bacad06f736cb --- /dev/null +++ b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_bg.properties @@ -0,0 +1,31 @@ +# The MIT License +# +# Bulgarian translation: Copyright (c) 2015, 2016, Alexander Shopov +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. + +Description=\ + Описание +Full\ name=\ + Пълно име +# User ‘{0}’ Configuration +title=\ + Настройки за потребителя „{0}“ +Save=\ + Запазване diff --git a/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_ca.properties b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_ca.properties new file mode 100644 index 0000000000000..aad7c2e559ef0 --- /dev/null +++ b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_ca.properties @@ -0,0 +1,4 @@ +# This file is under the MIT License by authors + +Description=Descripció +Full\ name=Nom diff --git a/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_cs.properties b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_cs.properties new file mode 100644 index 0000000000000..541815f7d164d --- /dev/null +++ b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_cs.properties @@ -0,0 +1,25 @@ +# The MIT License +# +# Copyright (c) 2004-2010, Sun Microsystems, Inc. +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. + +Description=Popis +Save=Uložit +Full\ name=Jméno diff --git a/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_da.properties b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_da.properties new file mode 100644 index 0000000000000..aa4a8b98d5003 --- /dev/null +++ b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_da.properties @@ -0,0 +1,26 @@ +# The MIT License +# +# Copyright (c) 2004-2010, Sun Microsystems, Inc. Kohsuke Kawaguchi. Knud Poulsen. +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. + +title=Bruger ''{0}'' Konfiguration +Full\ name=Dit navn +Save=Gem +Description=Beskrivelse diff --git a/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_de.properties b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_de.properties new file mode 100644 index 0000000000000..4448b8c629782 --- /dev/null +++ b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_de.properties @@ -0,0 +1,26 @@ +# The MIT License +# +# Copyright (c) 2004-2009, Sun Microsystems, Inc., Kohsuke Kawaguchi, Simon Wiest +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. + +Full\ name=Ihr Name +Description=Beschreibung +Save=Speichern +title=Benutzer „{0}“ konfigurieren diff --git a/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_es.properties b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_es.properties new file mode 100644 index 0000000000000..76ba23330c2f4 --- /dev/null +++ b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_es.properties @@ -0,0 +1,27 @@ +# The MIT License +# +# Copyright (c) 2004-2009, Sun Microsystems, Inc., Kohsuke Kawaguchi +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. + +title=Configuración del usuario: ''{0}'' +Full\ name=Nombre +Save=Guardar +Description=Descripción + diff --git a/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_fi.properties b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_fi.properties new file mode 100644 index 0000000000000..03769c1d17c46 --- /dev/null +++ b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_fi.properties @@ -0,0 +1,24 @@ +# The MIT License +# +# Copyright (c) 2004-2010, Sun Microsystems, Inc. +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. + +Description=Kuvaus +Save=Tallenna diff --git a/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_fr.properties b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_fr.properties new file mode 100644 index 0000000000000..8ec32b9d88a6f --- /dev/null +++ b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_fr.properties @@ -0,0 +1,26 @@ +# The MIT License +# +# Copyright (c) 2004-2009, Sun Microsystems, Inc., Kohsuke Kawaguchi, Eric Lefevre-Ardant +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. + +Full\ name=Votre nom +Description=Présentation +Save=Sauvegarder +title=Configuration de l''utilisateur ''{0}'' diff --git a/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_hu.properties b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_hu.properties new file mode 100644 index 0000000000000..6e8cb34dc9143 --- /dev/null +++ b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_hu.properties @@ -0,0 +1,4 @@ +# This file is under the MIT License by authors + +Description=Leírás +Full\ name=Ön neve diff --git a/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_it.properties b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_it.properties new file mode 100644 index 0000000000000..015fc76eb7c37 --- /dev/null +++ b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_it.properties @@ -0,0 +1,27 @@ +# The MIT License +# +# Italian localization plugin for Jenkins +# Copyright © 2020 Alessandro Menti +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. + +Description=Descrizione +Full\ name=Nome completo +Save=Salva +title=Configurazione dell''utente "{0}" diff --git a/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_ja.properties b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_ja.properties new file mode 100644 index 0000000000000..efcc432364b9e --- /dev/null +++ b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_ja.properties @@ -0,0 +1,26 @@ +# The MIT License +# +# Copyright (c) 2004-2009, Sun Microsystems, Inc., Kohsuke Kawaguchi, Seiji Sogabe, id:cactusman +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. + +Full\ name=あなたの名前 +Description=説明 +Save=保存 +title=ユーザー ''{0}'' の設定 diff --git a/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_ko.properties b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_ko.properties new file mode 100644 index 0000000000000..fd0ca539d7d9e --- /dev/null +++ b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_ko.properties @@ -0,0 +1,4 @@ +# This file is under the MIT License by authors + +Description=소개 +Full\ name=이름 diff --git a/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_lv.properties b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_lv.properties new file mode 100644 index 0000000000000..b16f28220290b --- /dev/null +++ b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_lv.properties @@ -0,0 +1,25 @@ +# The MIT License +# +# Copyright (c) 2004-2010, Sun Microsystems, Inc. +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. + +Full\ name=Tavs vārds +description.title=Apraksts +Save=Saglabāt diff --git a/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_nb_NO.properties b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_nb_NO.properties new file mode 100644 index 0000000000000..58a3343fb3d86 --- /dev/null +++ b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_nb_NO.properties @@ -0,0 +1,25 @@ +# The MIT License +# +# Copyright (c) 2004-2010, Sun Microsystems, Inc. +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. + +Description=Beskrivelse +Save=Lagre +Full\ name=Ditt navn diff --git a/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_nl.properties b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_nl.properties new file mode 100644 index 0000000000000..7756763a1a74f --- /dev/null +++ b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_nl.properties @@ -0,0 +1,25 @@ +# The MIT License +# +# Copyright (c) 2004-2009, Sun Microsystems, Inc., Kohsuke Kawaguchi, id:sorokh +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. + +Full\ name=Uw naam +Description=Omschrijving +Save=Opslaan diff --git a/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_pl.properties b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_pl.properties new file mode 100644 index 0000000000000..2c63348a17e36 --- /dev/null +++ b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_pl.properties @@ -0,0 +1,27 @@ +# The MIT License +# +# Copyright (c) 2004-2016, Sun Microsystems, Damian Szczepanik +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. + +Description=Opis +Full\ name=Twoje imię i nazwisko +# User ‘{0}’ Configuration +title=Konfiguracja użytkownika ‘{0}’ +Save=Zapisz diff --git a/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_pt_BR.properties b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_pt_BR.properties new file mode 100644 index 0000000000000..c1025982d036d --- /dev/null +++ b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_pt_BR.properties @@ -0,0 +1,27 @@ +# The MIT License +# +# Copyright (c) 2004-2009, Sun Microsystems, Inc., Kohsuke Kawaguchi, Reginaldo L. Russinholi, Cleiber Silva +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. + +Full\ name=Seu nome +Description=Descrição +Save=Salvar +# User ''{0}'' Configuration +title=Configuração do usuário ''{0}'' diff --git a/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_ru.properties b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_ru.properties new file mode 100644 index 0000000000000..b05ddbbb49a82 --- /dev/null +++ b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_ru.properties @@ -0,0 +1,25 @@ +# The MIT License +# +# Copyright (c) 2004-2009, Sun Microsystems, Inc., Kohsuke Kawaguchi, Mike Salnikov +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. + +Full\ name=Полное имя +Description=Описание +Save=Сохранить diff --git a/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_sk.properties b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_sk.properties new file mode 100644 index 0000000000000..8c8f98e91b07c --- /dev/null +++ b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_sk.properties @@ -0,0 +1,4 @@ +# This file is under the MIT License by authors + +Description=Popis +Full\ name=Meno diff --git a/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_sr.properties b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_sr.properties new file mode 100644 index 0000000000000..6985fb9f994ac --- /dev/null +++ b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_sr.properties @@ -0,0 +1,6 @@ +# This file is under the MIT License by authors + +title=Подешавања корисника ‘{0}’ +Full\ name=Име и презиме +Description=Опис +Save=Сачувај diff --git a/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_sv_SE.properties b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_sv_SE.properties new file mode 100644 index 0000000000000..6e75a39365c23 --- /dev/null +++ b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_sv_SE.properties @@ -0,0 +1,25 @@ +# The MIT License +# +# Copyright (c) 2004-2010, Sun Microsystems, Inc. +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. + +Description=Beskrivning +Save=Spara +Full\ name=Ditt namn diff --git a/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_tr.properties b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_tr.properties new file mode 100644 index 0000000000000..66ce578249aa5 --- /dev/null +++ b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_tr.properties @@ -0,0 +1,26 @@ +# The MIT License +# +# Copyright (c) 2004-2009, Sun Microsystems, Inc., Kohsuke Kawaguchi, Oguz Dag +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. + +Full\ name=İsminiz +Description=Açıklama +Save=Kaydet +title=Kullanıcı ''{0}'' Konfigürasyonu diff --git a/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_uk.properties b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_uk.properties new file mode 100644 index 0000000000000..3dc2751ccdeb3 --- /dev/null +++ b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_uk.properties @@ -0,0 +1,4 @@ +# This file is under the MIT License by authors + +Description=Опис +Full\ name=Ваше ім''я diff --git a/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_zh_TW.properties b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_zh_TW.properties new file mode 100644 index 0000000000000..55957bf767493 --- /dev/null +++ b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_zh_TW.properties @@ -0,0 +1,26 @@ +# The MIT License +# +# Copyright (c) 2004-2013, Sun Microsystems, Inc., Chunghwa Telecom Co., Ltd., +# and Pei-Tang Huang +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +title=使用者 ''{0}'' 的設定 +Full\ name=全名 +Description=說明 +Save=儲存 diff --git a/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryExperimentalAction/index.jelly b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryExperimentalAction/index.jelly new file mode 100644 index 0000000000000..93865e2c5461f --- /dev/null +++ b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryExperimentalAction/index.jelly @@ -0,0 +1,74 @@ + + + + + + + + + +

+ ${%title(it.targetUser.fullName)} +

+ + + + + + + + + + + + + + + + + + + + + + + +
+ ${%warningNoItems} +
+
+
+ + + + + +
+ +
+
+
diff --git a/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryExperimentalAction/index.properties b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryExperimentalAction/index.properties new file mode 100644 index 0000000000000..0d7f55d24c274 --- /dev/null +++ b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryExperimentalAction/index.properties @@ -0,0 +1,24 @@ +# The MIT License +# +# Copyright (c) 2022, CloudBees, Inc. +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. + +title=Experimental flags configuration for ‘{0}’ +warningNoItems=Currently no properties with an Experimental category. diff --git a/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryPreferencesAction/index.jelly b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryPreferencesAction/index.jelly new file mode 100644 index 0000000000000..44220bd144610 --- /dev/null +++ b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryPreferencesAction/index.jelly @@ -0,0 +1,74 @@ + + + + + + + + + +

+ ${%title(it.targetUser.fullName)} +

+ + + + + + + + + + + + + + + + + + + + + + + +
+ ${%warningNoItems} +
+
+
+ + + + + +
+ +
+
+
diff --git a/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryPreferencesAction/index.properties b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryPreferencesAction/index.properties new file mode 100644 index 0000000000000..21a13047b5218 --- /dev/null +++ b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryPreferencesAction/index.properties @@ -0,0 +1,24 @@ +# The MIT License +# +# Copyright (c) 2022, CloudBees, Inc. +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. + +title=Preferences configuration for ‘{0}’ +warningNoItems=Currently no properties with a Preference category. diff --git a/core/src/main/resources/hudson/model/userproperty/UserPropertyCategorySecurityAction/index.jelly b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategorySecurityAction/index.jelly new file mode 100644 index 0000000000000..743a73d892d56 --- /dev/null +++ b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategorySecurityAction/index.jelly @@ -0,0 +1,75 @@ + + + + + + + + + +

+ ${%title(it.targetUser.fullName)} +

+ + + + + + + + + + + + + + + + + + + + + + + + +
+ ${%warningNoItems} +
+
+
+ + + + + +
+ +
+
+
diff --git a/core/src/main/resources/hudson/model/userproperty/UserPropertyCategorySecurityAction/index.properties b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategorySecurityAction/index.properties new file mode 100644 index 0000000000000..922c3e94ae757 --- /dev/null +++ b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategorySecurityAction/index.properties @@ -0,0 +1,24 @@ +# The MIT License +# +# Copyright (c) 2022, CloudBees, Inc. +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. + +title=Security configuration for ‘{0}’ +warningNoItems=Currently no properties with a Security category. diff --git a/war/src/main/resources/images/symbols/flask.svg b/war/src/main/resources/images/symbols/flask.svg new file mode 100644 index 0000000000000..ccfce7974afdb --- /dev/null +++ b/war/src/main/resources/images/symbols/flask.svg @@ -0,0 +1,2 @@ + +Flask \ No newline at end of file