2015-12-22 3 views
1

Je développe un plan de confluence où un utilisateur peut choisir entre les projets jira et les utiliser pour un rapport de questions spécifiques jira.confluence Demande d'API REST tout en n'étant pas administrateur se termine en erreur 401

les deux instances sont correctement connectées entre elles et j'obtiens des résultats mais seulement si je suis connecté en tant qu'administrateur. avec l'utilisateur normal je reçois ceci:

<status> 
    <status-code>401</status-code> 
    <message>This resource requires WebSudo.</message> 
</status> 

Malheureusement, je dois obtenir les informations du serveur JIRA comme demande de poste ajax avec javascript et voici mon code:

function pickDate(e, state) { 
    AJS.$('#spLebenStart').datePicker({ 
     overrideBrowserDefault: true 
    }); 

    getJiraUrl(); 
} 

function getJiraUrl(){ 
    var appUrl = AJS.contextPath() + "/rest/applinks/1.0/applicationlink/type/jira"; 

    $.ajax({ 
     type: 'GET', 
     url: appUrl, 
     data: { 
      key: "value" 
     }, 
     dataType: "xml", 
     success: function (xml){ 
      jiraID = $(xml).find("id").text(); 
     }, 
     complete: function(){ 
      getJiraProjects(jiraID); 
     }, 
     error: function() { 
      alert("ERROR @ getJiraUrl"); 
     } 
    }); 
} 

function getJiraProjects(applicationId){ 
    var restUrl = AJS.contextPath() + "/rest/applinks/1.0/entities/"+applicationId+"?os_authType=any"; 

    $.ajax({ 
     type: 'GET', 
     url: restUrl, 
     data: { 
      key: "value" 
     }, 
     dataType: "xml", 
     success: function (xml){ 
      jiraProjectKeys = []; 
      $(xml).find("entity").each(function(){ 
       jiraProjectKeys.push({id: $(this).attr("key"), text: $(this).attr("name")}); 
      }); 
     }, 
     crossDomain: true, 
     xhrFields: { 
      withCredentials: true 
     }, 
     error: function() { 
      alert("ERROR @ getJiraProjects"); 
     }, 
     complete: function(){ 
      AJS.$('#spSelect').auiSelect2({ 
       placeholder: 'Projekt auswählen...', 
       data:jiraProjectKeys, 
       multiple: false 
      }); 
     } 
    }); 
} 

j'ai essayé d'utiliser informations de connexion avec l'authentification de base dans ajax mais il n'a pas aidé. Bien sûr, je peux coder l'identifiant dans le code, mais que se passe-t-il s'il est modifié? ce n'est pas la meilleure solution. comment puis-je gérer le problème websudo?

merci et je vous souhaite de joyeuses fêtes et une bonne année.

Répondre

1

Je suis nouveau ici (en tant que contributeur) alors pardonnez mes débutants bloopers.

Il semble que l'accès à /rest/applinks/1.0/applicationlink/type/jira nécessite des droits d'administrateur. Mais il y a une solution de contournement non documentée (AFAIK) et c'est comme ça que je le fais. Il y a un plugin Atlassian appelé Confluence JIRA Plugin. Il est livré avec Confluence (il devrait donc être disponible dans votre installation). Il vous fournit quelques fonctionnalités intéressantes permettant l'intégration de JIRA (par exemple, les macros JIRA et JIRA). Fournir l'intégration, il ajoute également quelques points de terminaison utiles à votre API Confluence REST (qui ne nécessitent pas l'accès admin):

  1. /rest/jiraanywhere/1.0/servers ou /rest/jira-integration/1.0/servers à la liste des serveurs JIRA liés (inlcuding id AppLink)
  2. /jira-integration/1.0/servers/{INSERT APPLINK ID HERE}/projects Pour répertorier les projets JIRA disponibles pour l'utilisateur connecté

Maintenant, selon vos besoins, j'appuierais sur 1. pour obtenir l'identifiant d'application, puis 2. pour obtenir la liste des projets. Espérons que cela fonctionne avec vos versions de produits.

BONUS - JIRA Proxy

Un autre critère d'évaluation est agréable /plugins/servlet/applinks/proxy. Il permet de transmettre des requêtes REST simples aux instances JIRA liées. Par exemple /plugins/servlet/applinks/proxy?appId={INSERT APPLINK ID HERE}&path=%2Frest%2Fapi%2F2%2Fsearch appellera JIRA issue search REST endpoint et liste les problèmes disponibles à l'utilisateur (comme dans la recherche JIRA). Par "simple requête", je veux dire que seules les méthodes HTTP GET et POST sont prises en charge dans la version actuelle (avec POST limité aux types de contenu application/xml et multipart/form-data). La servlet prend en charge les paramètres de chaîne de requête et d'en-tête HTTP. Consultez la source de la servlet dans plugin's source pour obtenir plus d'informations car je n'ai trouvé aucune documentation en ligne pour cela.

En utilisant cette servlet, vous pouvez obtenir la liste des projets et en demandant /plugins/servlet/applinks/proxy?appId={INSERT APPLINK ID HERE}&path=%2Frest%2Fapi%2F2%2Fproject

chemin de servlets dans la prise en pension est confluence-jira-plugin/src/main/java/com/atlassian/confluence/plugins/jira/AppLinksProxyRequestServlet.java, mais la plupart des choses importantes est dans sa classe de base confluence-jira-plugin/src/main/java/com/atlassian/confluence/plugins/jira/AbstractProxyServlet.java

+0

merci pour votre solution – vandyke

+0

Je suis heureux de vous avoir aidé. Et merci pour ma première réponse acceptée sur SO :) – jannis