/** * Short-cut method that redundantly checks the specified permission (to catch any typos) and then escalates * authentication in order to save the {@link CredentialsStore}. * * @param p the permissions of the operation being performed. * @throws IOException if something goes wrong. */ private void checkedSave(Permission p) throws IOException { checkPermission(p); try (ACLContext oldContext = ACL.as(ACL.SYSTEM)) { FolderCredentialsProperty property = owner.getProperties().get(FolderCredentialsProperty.class); if (property == null) { synchronized (emptyProperties) { owner.getProperties().add(this); emptyProperties.remove(owner); } } // we assume it is ourselves owner.save(); } }
/** * {@inheritDoc} */ @Override protected void checkRename(String newName) { for (Job<?,?> job : getAllJobs()) { if (job.isBuilding()) { throw new Failure("Unable to rename a folder while a job inside it is building."); } } String blocker = renameBlocker(); if (blocker != null) { throw new Failure(blocker); } }
/** * For URL binding. * * @param name the name of the child. * @return the job or {@code null} if there is no such child. * @see #getUrlChildPrefix */ public I getJob(String name) { return getItem(name); }
private Collection<LibraryConfiguration> forGroup(@CheckForNull ItemGroup<?> group) { List<LibraryConfiguration> libraries = new ArrayList<>(); for (ItemGroup<?> g = group; g instanceof AbstractFolder; g = ((AbstractFolder) g).getParent()) { FolderLibraries prop = ((AbstractFolder<?>) g).getProperties().get(FolderLibraries.class); if (prop != null) { libraries.addAll(prop.getLibraries()); } } return libraries; }
/** * Makes the folder disabled. Will have no effect if the folder type does not {@linkplain #supportsMakeDisabled()}. * @param disabled {@code true} if the folder should be disabled. * @throws IOException if the operation could not complete. * @since 6.1.0 */ public void makeDisabled(boolean disabled) throws IOException { if (isDisabled() == disabled) { return; // noop } if (disabled && !supportsMakeDisabled()) { return; // do nothing if the disabling is unsupported } setDisabled(disabled); if (disabled && this instanceof Queue.Task) { Jenkins.getActiveInstance().getQueue().cancel((Queue.Task)this); } save(); ItemListener.fireOnUpdated(this); }
@Restricted(DoNotUse.class) @RequirePOST public void doDoRename(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException { if (!hasPermission(CONFIGURE)) { // rename is essentially delete followed by a create checkPermission(CREATE); checkPermission(DELETE); } String newName = req.getParameter("newName"); Jenkins.checkGoodName(newName); String blocker = renameBlocker(); if (blocker != null) { rsp.sendRedirect("rename?newName=" + URLEncoder.encode(newName, "UTF-8") + "&blocker=" + URLEncoder.encode(blocker, "UTF-8")); return; } renameTo(newName); rsp.sendRedirect2("../" + newName); }
/** * {@inheritDoc} */ @Override public CredentialsStore getStore(@CheckForNull ModelObject object) { if (object instanceof AbstractFolder) { final AbstractFolder<?> folder = AbstractFolder.class.cast(object); FolderCredentialsProperty property = folder.getProperties().get(FolderCredentialsProperty.class); if (property != null) { return property.getStore(); } synchronized (emptyProperties) { property = emptyProperties.get(folder); if (property == null) { property = new FolderCredentialsProperty(folder); emptyProperties.put(folder, property); } } return property.getStore(); } return null; }
AbstractFolder folder = (AbstractFolder) parent; if (folderName == null) { folderName = folder.getName(); } else { folderName = folder.getName() + " ยป " + folderName; HubotFolderProperty jfp = (HubotFolderProperty) folder.getProperties() .get(HubotFolderProperty.class); if (jfp != null) {
reporters.add(metric.reporter()); for (AbstractFolderProperty<?> p : getProperties()) { for (FolderHealthMetric metric : p.getHealthMetrics()) { recursive = recursive || metric.getType().isRecursive(); stack.push(getItems()); if (topLevelOnly) { while (!stack.isEmpty()) { for (Item item: getItems()) { for (FolderHealthMetric.Reporter reporter : reporters) { reporter.observe(item); reports.addAll(reporter.report()); for (AbstractFolderProperty<?> p : getProperties()) { reports.addAll(p.getHealthReports());
@Restricted(NoExternalUse.class) @RequirePOST public void doConfigSubmit(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException, Descriptor.FormException { checkPermission(CONFIGURE); properties.rebuild(req, json, getDescriptor().getPropertyDescriptors()); for (AbstractFolderProperty p : properties) { p.setOwner(this); icon.setOwner(this); submit(req, rsp); makeDisabled(json.optBoolean("disable")); save(); bc.commit(); } finally { namingStrategy.checkName(name); FormApply.success(getSuccessfulDestination()).generateResponse(req, rsp, this);
public void delete() throws IOException, InterruptedException { checkPermission(DELETE); if (!ownsRegistration && ItemDeletion.isRegistered(this)) { throw new Failure(Messages.AbstractFolder_BeingDeleted(getPronoun())); buildsInProgress.size(), getFullDisplayName() )); performDelete(); getParent().onDeleted(AbstractFolder.this); Jenkins.get().rebuildDependencyGraphAsync();
@Override public void save(Config config) { configs.remove(config); configs.add(config); try { getOwner().save(); } catch (IOException e) { throw new RuntimeException("failed to save config to store", e); } }
/** * Allows a subclass to block renames under dynamic conditions. * @return a message if rename should currently be prohibited, or null to allow */ @CheckForNull protected String renameBlocker() { for (Job<?,?> job : getAllJobs()) { if (job.isBuilding()) { return "Unable to rename a folder while a job inside it is building."; } } return null; }
if (!folder.hasPermission(Item.CONFIGURE)) { return FormValidation.ok();
/** * {@inheritDoc} */ @Override public CredentialsStore getStore(@CheckForNull ModelObject object) { if (object instanceof AbstractFolder) { final AbstractFolder<?> folder = AbstractFolder.class.cast(object); FolderCredentialsProperty property = folder.getProperties().get(FolderCredentialsProperty.class); if (property != null) { return property.getStore(); } synchronized (emptyProperties) { property = emptyProperties.get(folder); if (property == null) { property = new FolderCredentialsProperty(folder); emptyProperties.put(folder, property); } } return property.getStore(); } return null; }
AbstractFolder folder = (AbstractFolder) parent; if (folderName == null) { folderName = folder.getName(); } else { folderName = folder.getName() + " ยป " + folderName; HubotFolderProperty jfp = (HubotFolderProperty) folder.getProperties() .get(HubotFolderProperty.class); if (jfp != null) {
reporters.add(metric.reporter()); for (AbstractFolderProperty<?> p : getProperties()) { for (FolderHealthMetric metric : p.getHealthMetrics()) { recursive = recursive || metric.getType().isRecursive(); stack.push(getItems()); if (topLevelOnly) { while (!stack.isEmpty()) { for (Item item: getItems()) { for (FolderHealthMetric.Reporter reporter : reporters) { reporter.observe(item); reports.addAll(reporter.report()); for (AbstractFolderProperty<?> p : getProperties()) { reports.addAll(p.getHealthReports());
@Restricted(NoExternalUse.class) @RequirePOST public void doConfigSubmit(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException, Descriptor.FormException { checkPermission(CONFIGURE); properties.rebuild(req, json, getDescriptor().getPropertyDescriptors()); for (AbstractFolderProperty p : properties) { p.setOwner(this); icon.setOwner(this); submit(req, rsp); makeDisabled(json.optBoolean("disable")); save(); bc.commit(); } finally { namingStrategy.checkName(name); FormApply.success(getSuccessfulDestination()).generateResponse(req, rsp, this);
public void delete() throws IOException, InterruptedException { checkPermission(DELETE); if (!ownsRegistration && ItemDeletion.isRegistered(this)) { throw new Failure(Messages.AbstractFolder_BeingDeleted(getPronoun())); buildsInProgress.size(), getFullDisplayName() )); performDelete(); getParent().onDeleted(AbstractFolder.this); Jenkins.getActiveInstance().rebuildDependencyGraphAsync();
/** * Makes the folder disabled. Will have no effect if the folder type does not {@linkplain #supportsMakeDisabled()}. * @param disabled {@code true} if the folder should be disabled. * @throws IOException if the operation could not complete. * @since 6.1.0 */ public void makeDisabled(boolean disabled) throws IOException { if (isDisabled() == disabled) { return; // noop } if (disabled && !supportsMakeDisabled()) { return; // do nothing if the disabling is unsupported } setDisabled(disabled); if (disabled && this instanceof Queue.Task) { Jenkins.get().getQueue().cancel((Queue.Task)this); } save(); ItemListener.fireOnUpdated(this); }