All Downloads are FREE. Search and download functionalities are using the official Maven repository.

hudson.cli.ListJobsCommand Maven / Gradle / Ivy

The newest version!
/*
 * Copyright (c) 2013 Hudson.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *    Hudson - initial API and implementation and/or initial documentation
 */

package hudson.cli;

import hudson.Extension;
import hudson.XmlFile;
import static hudson.cli.ListTeamsCommand.Format.XML;
import hudson.model.AbstractItem;
import hudson.model.Hudson;
import hudson.model.Item;
import hudson.model.Job;
import hudson.model.TopLevelItem;
import java.io.IOException;
import java.io.PrintStream;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Set;
import org.eclipse.hudson.security.HudsonSecurityManager;
import org.eclipse.hudson.security.team.Team;
import org.eclipse.hudson.security.team.TeamManager;
import org.kohsuke.args4j.Option;
import org.springframework.security.core.Authentication;

/**
 * List the jobs in Hudson.
 * 

* If team management is enabled, list the jobs by team. * * @author Bob Foster */ @Extension public class ListJobsCommand extends CLICommand { @Override public String getShortDescription() { return "Lists the jobs in Hudson"; } private String getCurrentUser() { Authentication authentication = HudsonSecurityManager.getAuthentication(); return authentication.getName(); } enum Format { XML, CSV, PLAIN } @Option(name = "-team", usage = "Team to list; if omitted, all visible teams.") public String team; @Option(name = "-job", usage = "Fully-qualified job name. The config.xml for the job is returned.") public String job; @Option(name = "-format", usage = "Controls how the output from this command is printed. Always xml with -job option.") public ListTeamsCommand.Format format = ListTeamsCommand.Format.PLAIN; @Override protected int run() throws TeamManager.TeamNotFoundException { Team targetTeam = validateReadAccessToTeam(team, stderr); TeamManager teamManager = Hudson.getInstance().getTeamManager(); String[] jobs = null; if (team != null && targetTeam == null) { return -1; } if (job != null && targetTeam != null && !targetTeam.isJobOwner(job)) { stderr.println("Job "+job+" is not in team "+team); return -1; } if (job != null) { if (targetTeam == null) { targetTeam = teamManager.findJobOwnerTeam(job); } if (targetTeam == null) { stderr.println("Job "+job+" does not exist"); return -1; } if (!targetTeam.hasPermission(Item.EXTENDED_READ)) { stderr.println("User does not have permission to read config.xml"); return -1; } TopLevelItem item = Hudson.getInstance().getItem(job); if (item instanceof AbstractItem) { XmlFile file = ((AbstractItem)item).getConfigFile(); try { file.writeRawTo(stdout); } catch (IOException ex) { stderr.println("Error reading config.xml for job "+job); return -1; } finally { stdout.flush(); } } else { stderr.println("Cannot read config.xml"); return -1; } return 0; } else if (targetTeam != null) { Set aTeamJobs = targetTeam.getJobNames(); Arrays.sort(jobs = aTeamJobs.toArray(new String[aTeamJobs.size()])); } else { // Get items user can READ List items = Hudson.getInstance().getItems(); List itemNames = new ArrayList(); for (TopLevelItem item : items) { if (item instanceof Job) { itemNames.add(item.getName()); } } Arrays.sort(jobs = itemNames.toArray(new String[itemNames.size()])); } switch (format) { case XML: PrintWriter w = new PrintWriter(stdout); w.println(""); for (String job : jobs) { w.print(" "); w.print(job); w.println(" "); } w.println(""); w.flush(); break; case CSV: case PLAIN: for (String job : jobs) { stdout.println(job); } stdout.flush(); break; } return 0; } public static Team validateReadAccessToTeam(String team, PrintStream stderr) { Hudson h = Hudson.getInstance(); TeamManager teamManager = h.getTeamManager(); Team targetTeam = null; if (team != null) { if (!teamManager.isTeamManagementEnabled()) { stderr.println("team may not be specified unless team management is enabled"); } else { try { // check team exists first for better error message targetTeam = teamManager.findTeam(team); if (!team.equals(Team.PUBLIC_TEAM_NAME) && !teamManager.getCurrentUserTeams().contains(team)) { stderr.println("Current user does not have read access to team "+team); targetTeam = null; } } catch (TeamManager.TeamNotFoundException e) { stderr.println("Team "+team+" does not exist"); } } } return targetTeam; } public static String rtrim(String s) { int i = s.length()-1; while (i >= 0 && Character.isWhitespace(s.charAt(i))) { i--; } return s.substring(0, i+1); } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy