Bitbucket Api с ключом доступа SSH в качестве заголовка, чтобы получить общее количество запросов на извлечение в Java - PullRequest
0 голосов
/ 23 октября 2018

Я хочу сделать вызов rest для API-интерфейса bitbucket с закрытым ключом ssh в качестве заголовка. Например, URL-адрес (http://bitbucket.com/rest/api/1.0/repos/testProject/pull-requests?state=OPEN).

Есть ли способ вызвать этот URL-адрес с шаблоном остатка весны икак передать ssl ключ доступа в качестве заголовка.

1 Ответ

0 голосов
/ 24 октября 2018

Вместо использования ключей SSH используйте токены личного доступа:

https://confluence.atlassian.com/bitbucketserver/personal-access-tokens-939515499.html

(Представлено в Bitbucket 5.5)

Тогда вы можете использовать код, подобный этому:

package com.company.bitbucket.tools.application;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.StringJoiner;
import java.util.stream.Collectors;

import org.springframework.http.client.ClientHttpRequestInterceptor;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.servlet.ModelAndView;

import com.company.bitbucket.tools.HttpRequestInterceptor;
import com.company.bitbucket.tools.ProjectValue;
import com.company.bitbucket.tools.Projects;
import com.company.bitbucket.tools.UserValue;
import com.company.bitbucket.tools.Users;

@Controller
public class ProjectController {

    public static String BITBUCKET_URL = "https://bitbucket.company.com/rest/api/latest/";
    public static String PROJECTS = "projects";
    public static String PERMISSIONS = "permissions/users?permission=PROJECT_ADMIN";
    public static String PAT = "<put your generated token in here>";

@RequestMapping(value={"/projects"}, method = RequestMethod.GET)
public ModelAndView listProjects(){
    HashMap<String, String> list = getAdmins();
    ModelAndView model = new ModelAndView("projects");
    model.addObject("adminMap", list);
    return model;
}


private HashMap<String, String> getAdmins(){
    HashMap<String, String> projectMap = new HashMap<>();    
    RestTemplate restTemplate = new RestTemplate();
    List<ClientHttpRequestInterceptor> interceptors = new ArrayList<ClientHttpRequestInterceptor>();
    interceptors.add(new HttpRequestInterceptor("Authorization", "Bearer ".concat(PAT)));
    restTemplate.setInterceptors(interceptors);

    Projects projects = restTemplate.getForObject(BITBUCKET_URL.concat("projects?limit=100"), Projects.class);
    for(ProjectValue projectValue:  projects.getValues()) {
        String projectUrl = String.format("%s/%s/%s/%s", BITBUCKET_URL, PROJECTS, projectValue.getKey(), PERMISSIONS);
        Users users = restTemplate.getForObject(projectUrl, Users.class);
        List<String> names = new ArrayList<>();
        for (UserValue value: users.getValues()) {
            names.add(value.getUser().getDisplayName());
        }

        String commaSeparatedNames = String.join(", ", names);
        projectMap.put(projectValue.getName(), commaSeparatedNames);            
    }



    return projectMap;
}

}

Этот код получает список администраторов проекта, использующих остальные API, но вы можете изменить его, сделав любой запрос на отдых, какой пожелаете.

...