Jira API получает вложение

Я написал некоторый код, который отображает список вложений. Однако проблема в том, что я хочу, чтобы пользователь мог просматривать вложение без входа в систему. Есть ли способ аутентификации для пользователя? Вот мой код:

 //to get cases.  this returns a list of attachments, with the url in Jira

  $attachments = $jira_case->issues[0]->fields->attachment;

   //iterates over the lists and creates links
   foreach ($attachments as $i=> $attachment) {
      $html .="
      <tr>
          <td style='padding-left: 10px; width:0px; padding-top: 20px;' colspan='3'>
          ". ($i+1) .") <a target = '_blank' href ='". $attachment->content ."'>". nl2br($attachment->filename) ."</a>
          </td>
     </tr>";
}

Проблема в том, что когда пользователь нажимает на ссылку, если он не вошел в систему, ему будет предложено войти в систему. Я не хочу этого, так как это мое приложение аутентифицируется, так что пользователю не нужна учетная запись jira, Это возможно? Может быть, передавая какой-то токен?

Ясон

3 ответа

Решение

В случае, если кто-то еще задается вопросом, как это сделать:

$url = "https://mySite.atlassian.net/secure/attachment/". $attachment_id ."/". $attachment_name ."?os_username=". $this->jira_user_name ."&os_password=" . $this->jira_password;

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);

$file = curl_exec($ch);
curl_close($ch);

if($file){
     header('Content-Description: File Transfer');
     header('Content-Type: application/octet-stream');
     header('Content-Disposition: attachment; filename='.$attachment_name);
     header('Expires: 0');
     header('Cache-Control: must-revalidate');
     header('Pragma: public');
     echo ($file);
     exit;
}else{
     throw new Exception("Error:  file now found.");
}

С точки зрения JIRA, запрос от браузера пользователя не содержит никакого заголовка аутентификации. JIRA использует тот же набор разрешений для вложений, что и для проблем, поэтому, когда пользователь может просмотреть конкретную проблему JIRA, он также может просматривать (и загружать) вложения. Поэтому, если вы не сделаете свой проект {s} и выпуск {s} доступными для анонимного пользователя, кто-то с соответствующими разрешениями должен пройти аутентификацию. Если вы хотите, чтобы пользователи могли загружать вложения только через ваше приложение, как пользователь приложения, вам нужно каким-то образом прокси-сервер через приложение. Вместо того, чтобы отображать ссылки на страницы, указывающие непосредственно на JIRA, вам нужно генерировать ссылки, указывающие на ваш сервер, тогда ваш сервер должен связаться с JIRA для вложения и аутентифицировать себя как пользователя вашего приложения (с разрешениями для просмотра проблемы, которая содержит вложения) и передать ответ от JIRA конечному пользователю.

Юнирест

//Импорт

используйте Unirest\Request как UnirestRequest;

//Код Laravel //Контроллер

$url = "https://your-domain.atlassian.net/rest/api/3/attachment/content/{id}";

$headers = array('Accept' => 'application/json');

UnirestRequest::auth(env('JIRA_PROJECT_USER'), env('JIRA_PROJECT_KEY'));

$response = UnirestRequest::get($url, $headers);

вернуть $ответ->тело;

Другие вопросы по тегам