/* * The MIT License * * Copyright (c) 2011-2012, CloudBees, Inc., Stephen Connolly. * * 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 com.cloudbees.plugins.credentials; import hudson.model.Computer; import hudson.model.ModelObject; import hudson.model.Node; import java.io.Serializable; import jenkins.model.Jenkins; /** * The scope of credentials. */ public enum CredentialsScope implements Serializable { /** * This credential is only available to the object on which the credential is associated. Typically you would * use SYSTEM scoped credentials for things like email auth, slave connection, etc, i.e. where the * Jenkins instance itself is using the credential. */ SYSTEM { /** {@inheritDoc} */ @Override public String getDisplayName() { return Messages.CredentialsScope_SystemDisplayName(); } /** * {@inheritDoc} */ @Override public boolean isVisible(ModelObject context) { // we future-proof for the event that somebody defines a per-node credentials store // in which case a ViewCredentialsAction for the Node/Computer should also show the // SYSTEM scoped credentials return context instanceof Jenkins || context instanceof Node || context instanceof Computer; } }, /** * This credential is available to the object on which the credential is associated and all objects that are * children of that object. Typically you would use GLOBAL scoped credentials for things that are needed by * {@link hudson.model.Job}s. */ GLOBAL { /** {@inheritDoc} */ @Override public String getDisplayName() { return Messages.CredentialsScope_GlobalDisplayName(); } /** * {@inheritDoc} */ @Override public boolean isVisible(ModelObject context) { return true; } }, /** * This credential is available to the user which which the credential is associated. Typically you would use * USER scoped credentials where credentials are required for immediate actions. Some examples could include: * <ul> * <li>Tag this build</li> * <li>Deploy artifacts to some container NOW</li> * <li>etc</li> * </ul> * The key point is that the user is making a request and instructing Jenkins to use one of their own credentials * in the scope of the request. Where the request is something that happens automatically, e.g. a build triggered * by SCM polling, then USER scoped credentials are not usually appropriate (unless the action is one that can fail * gracefully) * <p> * Another way of looking at this is, if the action is one that is configured from the {@link hudson.model.Job}'s * Configure page, then don't use USER scope, as that prevents another user from modifying the job configuration * (because they will only be able to see their own credentials) */ USER { /** * {@inheritDoc} */ @Override public String getDisplayName() { return Messages.CredentialsScope_UserDisplayName(); } /** * {@inheritDoc} */ @Override public boolean isVisible(ModelObject context) { // technically the context doesn't matter here as there are currently no child context objects of User // but in the event that some plugin were to - say - permit defining user specific jobs // that were attached to the user object then those jobs should have the user's credentials // available. return true; } }; /** * Gets the display name for the credentials. * * @return The display name for the credentials. */ public abstract String getDisplayName(); /** * Tests if credentials with this scope are visible in the supplied context. * * @param context the context. * @return {@code true} if credentials with this scope are visible in the supplied context. * @since 2.1.5 */ public abstract boolean isVisible(ModelObject context); }