use of hudson.model.User in project blueocean-plugin by jenkinsci.
the class GitCacheCloneReadSaveRequest method getActiveRepository.
@Nonnull
private Git getActiveRepository(Repository repository) throws IOException {
try {
// Clone the bare repository
File cloneDir = File.createTempFile("clone", "");
if (cloneDir.exists()) {
if (cloneDir.isDirectory()) {
FileUtils.deleteDirectory(cloneDir);
} else {
if (!cloneDir.delete()) {
throw new ServiceException.UnexpectedErrorException("Unable to delete repository clone");
}
}
}
if (!cloneDir.mkdirs()) {
throw new ServiceException.UnexpectedErrorException("Unable to create repository clone directory");
}
String url = repository.getConfig().getString("remote", "origin", "url");
Git gitClient = Git.cloneRepository().setCloneAllBranches(false).setProgressMonitor(new CloneProgressMonitor(url)).setURI(repository.getDirectory().getCanonicalPath()).setDirectory(cloneDir).call();
RemoteRemoveCommand remove = gitClient.remoteRemove();
remove.setName("origin");
remove.call();
RemoteAddCommand add = gitClient.remoteAdd();
add.setName("origin");
add.setUri(new URIish(gitSource.getRemote()));
add.call();
if (GitUtils.isSshUrl(gitSource.getRemote())) {
// Get committer info and credentials
User user = User.current();
if (user == null) {
throw new ServiceException.UnauthorizedException("Not authenticated");
}
BasicSSHUserPrivateKey privateKey = UserSSHKeyManager.getOrCreate(user);
// Make sure up-to-date and credentials work
GitUtils.fetch(repository, privateKey);
} else {
FetchCommand fetch = gitClient.fetch();
fetch.call();
}
if (!StringUtils.isEmpty(sourceBranch) && !sourceBranch.equals(branch)) {
CheckoutCommand checkout = gitClient.checkout();
checkout.setStartPoint("origin/" + sourceBranch);
checkout.setName(sourceBranch);
// to create a new local branch
checkout.setCreateBranch(true);
checkout.setUpstreamMode(CreateBranchCommand.SetupUpstreamMode.NOTRACK);
checkout.call();
checkout = gitClient.checkout();
checkout.setName(branch);
// this *should* be a new branch
checkout.setCreateBranch(true);
checkout.setUpstreamMode(CreateBranchCommand.SetupUpstreamMode.NOTRACK);
checkout.call();
} else {
CheckoutCommand checkout = gitClient.checkout();
checkout.setStartPoint("origin/" + branch);
checkout.setName(branch);
// to create a new local branch
checkout.setCreateBranch(true);
checkout.setUpstreamMode(CreateBranchCommand.SetupUpstreamMode.NOTRACK);
checkout.call();
}
return gitClient;
} catch (GitAPIException | URISyntaxException ex) {
throw new ServiceException.UnexpectedErrorException("Unable to get working repository directory", ex);
}
}
use of hudson.model.User in project blueocean-plugin by jenkinsci.
the class GitReadSaveRequest method getCredential.
@CheckForNull
StandardCredentials getCredential() {
StandardCredentials credential = null;
if (GitUtils.isSshUrl(gitSource.getRemote()) || GitUtils.isLocalUnixFileUrl(gitSource.getRemote())) {
// Get committer info and credentials
User user = User.current();
if (user == null) {
throw new ServiceException.UnauthorizedException("Not authenticated");
}
credential = UserSSHKeyManager.getOrCreate(user);
} else {
throw new ServiceException.UnauthorizedException("Editing only supported for repositories using SSH");
}
return credential;
}
use of hudson.model.User in project blueocean-plugin by jenkinsci.
the class GitReadSaveService method getContent.
@Override
public Object getContent(@Nonnull StaplerRequest req, @Nonnull Item item) {
item.checkPermission(Item.READ);
User user = User.current();
if (user == null) {
throw new ServiceException.UnauthorizedException("Not authenticated");
}
GitReadSaveRequest r = makeSaveRequest(item, req);
try {
String encoded = Base64.encode(r.read());
return new GitFile(new GitContent(r.filePath, user.getId(), r.gitSource.getRemote(), r.filePath, 0, "sha", encoded, "", r.branch, r.sourceBranch, true, ""));
} catch (ServiceException.UnauthorizedException e) {
// if (r.gitSource.getRemote().matches("([^@:]+@.*|ssh://.*)"))
throw new ServiceException.PreconditionRequired("Invalid credential", e);
} catch (IOException e) {
throw new ServiceException.UnexpectedErrorException("Unable to get file content", e);
}
}
use of hudson.model.User in project blueocean-plugin by jenkinsci.
the class GitReadSaveTest method bareRepoReadWriteNoEmail.
@Test
public void bareRepoReadWriteNoEmail() throws Exception {
if (!OsUtils.isUNIX()) {
// can't really run this on windows
return;
}
User user = login("bob", "Bob Smith", null);
startSSH(user);
String userHostPort = "bob@127.0.0.1:" + sshd.getPort();
String remote = "ssh://" + userHostPort + "" + repoForSSH.getRoot().getCanonicalPath() + "/.git";
testGitReadWrite(GitReadSaveService.ReadSaveType.CACHE_BARE, remote, repoForSSH, masterPipelineScript, user);
}
use of hudson.model.User in project blueocean-plugin by jenkinsci.
the class GitReadSaveTest method startSSH.
private void startSSH(@Nullable User u) throws Exception {
if (sshd == null) {
// Set up an SSH server with access to a git repo
User user;
if (u == null) {
user = login();
} else {
user = u;
}
final BasicSSHUserPrivateKey key = UserSSHKeyManager.getOrCreate(user);
final JSch jsch = new JSch();
final KeyPair pair = KeyPair.load(jsch, key.getPrivateKey().getBytes(), null);
File keyFile = new File(System.getProperty("TEST_SSH_SERVER_KEY_FILE", File.createTempFile("hostkey", "ser").getCanonicalPath()));
int port = Integer.parseInt(System.getProperty("TEST_SSH_SERVER_PORT", "0"));
boolean allowLocalUser = Boolean.getBoolean("TEST_SSH_SERVER_ALLOW_LOCAL");
String userPublicKey = Base64.encode(pair.getPublicKeyBlob());
sshd = new SSHServer(repoForSSH.getRoot(), keyFile, port, allowLocalUser, ImmutableMap.of("bob", userPublicKey), true);
// Go, go, go
sshd.start();
}
}
Aggregations