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. . Это возможно? Может быть, передав какой-то токен?

Джейсон


person jason    schedule 13.02.2015    source источник
comment
Вы можете использовать учетную запись службы, которая может просматривать все материалы в этом проекте.   -  person Koshinae    schedule 15.02.2015


Ответы (2)


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

person enterbios    schedule 18.02.2015
comment
Спасибо, именно так я и сделал. Выложу код, вдруг кому надо. - person jason; 21.02.2015

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

$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.");
}
person jason    schedule 21.02.2015