Hello !
I can not create a Defect in HP ALM,
When I request to create a defect I receive a 401 Unauthorized...
From what I understood from API:
- Authenticate (HttpRequest on /api/authentication/sign-in) and retrieve the following cookies "LWSSO_COOKIE_KEY", "QCSession", "ALM_USER", "XSRF-TOKEN";
- A session (HttpRequest on /rest/site-session) must be initialized by placing the retrieved cookies in the header and then retrieving the last "JSESSIONID" cookie;
- Finally, I request HTTP at this address "/rest/domains/" + HPALMDomain + "/projects/" + HPALMProject + "/defects" by placing all the cookies.
Each of the steps go perfectly well, I retrieve each time the cookies that I reuse for the following query. I have already tried to place only certain cookies at certain times.
Here is my source code, if you could help me it would be great!
public static class HPALMHelper
{
#region Properties
private static string HPALMUrl = ConfigurationManager.AppSettings["HPALMUrl"];
private static string HPALMDomain = ConfigurationManager.AppSettings["HPALMDomain"];
private static string HPALMUserName = ConfigurationManager.AppSettings["HPALMUserName"];
private static string HPALMPassWord = ConfigurationManager.AppSettings["HPALMPassWord"];
private static string HPALMProject = ConfigurationManager.AppSettings["HPALMProject"];
#endregion
private static string Base64Encode(string plainText)
{
var plainTextBytes = System.Text.Encoding.UTF8.GetBytes(plainText);
return Convert.ToBase64String(plainTextBytes);
}
/*private static WebResponse ConnectHPALM()
{
#region Authentication Request
string StrServerLogin = HPALMUrl + "/api/authentication/sign-in";
HttpWebRequest authRequest = (HttpWebRequest)WebRequest.Create(StrServerLogin);
authRequest.Headers[HttpRequestHeader.Authorization] = "Basic " + Base64Encode(HPALMUserName + ":" + HPALMPassWord);
WebResponse authResponse = authRequest.GetResponse();
#endregion
return authResponse;
}*/
private static WebResponse ConnectHPALM(out string SSOCookie)
{
#region Authentication Request
string StrServerLogin = HPALMUrl + "/api/authentication/sign-in";
HttpWebRequest authRequest = (HttpWebRequest)WebRequest.Create(StrServerLogin);
authRequest.Headers[HttpRequestHeader.Authorization] = "Basic " + Base64Encode(HPALMUserName + ":" + HPALMPassWord);
WebResponse authResponse = authRequest.GetResponse();
#endregion
#region Session Request
Uri target = new Uri(HPALMUrl);
string SiteSession = HPALMUrl + "/rest/site-session";
HttpWebRequest createSessionRequest = (HttpWebRequest)WebRequest.Create(SiteSession);
createSessionRequest.Method = "POST";
createSessionRequest.CookieContainer = new CookieContainer();
string AuthCookies = authResponse.Headers.ToString();
string LWSSOCookie = AuthCookies.Substring(AuthCookies.IndexOf("LWSSO_COOKIE_KEY=") + 17);
LWSSOCookie = LWSSOCookie.Substring(0, LWSSOCookie.IndexOf(";"));
createSessionRequest.CookieContainer.Add(new Cookie("LWSSO_COOKIE_KEY", LWSSOCookie) { Domain = target.Host });
string QCSessionCookie = AuthCookies.Substring(AuthCookies.IndexOf("QCSession=") + 10);
QCSessionCookie = QCSessionCookie.Substring(0, QCSessionCookie.IndexOf(";"));
createSessionRequest.CookieContainer.Add(new Cookie("QCSession", QCSessionCookie) { Domain = target.Host });
string UserCookie = AuthCookies.Substring(AuthCookies.IndexOf("ALM_USER=") + 9);
UserCookie = UserCookie.Substring(0, UserCookie.IndexOf(";"));
createSessionRequest.CookieContainer.Add(new Cookie("ALM_USER", UserCookie) { Domain = target.Host });
string TokenCookie = AuthCookies.Substring(AuthCookies.IndexOf("XSRF-TOKEN=") + 12);
TokenCookie = TokenCookie.Substring(0, TokenCookie.IndexOf(";"));
createSessionRequest.CookieContainer.Add(new Cookie("XSRF-TOKEN", TokenCookie) { Domain = target.Host });
SSOCookie = LWSSOCookie;
createSessionRequest.Headers[HttpRequestHeader.Authorization] = "Basic " + Base64Encode(HPALMUserName + ":" + HPALMPassWord);
WebResponse createSessionResponse = createSessionRequest.GetResponse();
#endregion
return createSessionResponse;
}
private static WebResponse LogOutHPALM()
{
#region Authentication Request
string StrServerLogin = HPALMUrl + "/api/authentication/sign-out";
HttpWebRequest authRequest = (HttpWebRequest)WebRequest.Create(StrServerLogin);
authRequest.Headers[HttpRequestHeader.Authorization] = "Basic " + Base64Encode(HPALMUserName + ":" + HPALMPassWord);
WebResponse authResponse = authRequest.GetResponse();
#endregion
return authResponse;
}
public static HttpStatusCode CreateDefect(string entity, out string createDefectResponseURL)
{
string SSOCookie;
WebResponse authResponse = ConnectHPALM(out SSOCookie);
HttpWebRequest createDefectRequest = (HttpWebRequest)WebRequest.Create(HPALMUrl + "/rest/domains/" + HPALMDomain + "/projects/" + HPALMProject + "/defects");
createDefectRequest.Method = "POST";
Uri target = new Uri(HPALMUrl);
#region Stream Datas
using (var defectDatas = new StreamWriter(createDefectRequest.GetRequestStream()))
{
defectDatas.Write(entity);
defectDatas.Flush();
defectDatas.Close();
}
#endregion
#region Header
createDefectRequest.Headers.Add("Accept-Language", "en-US,en;q=0.8,he;q=0.6");
createDefectRequest.Headers.Add("Accept-Encoding", "gzip, deflate, sdch");
createDefectRequest.KeepAlive = true;
createDefectRequest.Accept = "application/json";
createDefectRequest.ContentType = "application/json";
#endregion
#region Get & Set all cookies
createDefectRequest.CookieContainer = new CookieContainer();
string AuthCookies = authResponse.Headers.ToString();
/*string JSESSIONIDCookie = AuthCookies.Substring(AuthCookies.IndexOf("JSESSIONID=") + 11);
JSESSIONIDCookie = JSESSIONIDCookie.Substring(0, JSESSIONIDCookie.IndexOf(";"));
createDefectRequest.CookieContainer.Add(new Cookie("JSESSIONID", JSESSIONIDCookie) { Domain = target.Host });*/
//createDefectRequest.CookieContainer.Add(new Cookie("LWSSO_COOKIE_KEY", SSOCookie) { Domain = target.Host });
/*string QCSessionCookie = AuthCookies.Substring(AuthCookies.IndexOf("QCSession=") + 10);
QCSessionCookie = QCSessionCookie.Substring(0, QCSessionCookie.IndexOf(";"));
createDefectRequest.CookieContainer.Add(new Cookie("QCSession", QCSessionCookie) { Domain = target.Host });
string UserCookie = AuthCookies.Substring(AuthCookies.IndexOf("ALM_USER=") + 9);
UserCookie = UserCookie.Substring(0, UserCookie.IndexOf(";"));
createDefectRequest.CookieContainer.Add(new Cookie("ALM_USER", UserCookie) { Domain = target.Host });
string TokenCookie = AuthCookies.Substring(AuthCookies.IndexOf("XSRF-TOKEN=") + 12);
TokenCookie = TokenCookie.Substring(0, TokenCookie.IndexOf(";"));
createDefectRequest.CookieContainer.Add(new Cookie("XSRF-TOKEN", TokenCookie) { Domain = target.Host });*/
#endregion
HttpWebResponse createDefectResponse = (HttpWebResponse)createDefectRequest.GetResponse();
createDefectResponseURL = createDefectResponse.Headers.Get("Location");
LogOutHPALM();
return createDefectResponse.StatusCode;
}
public static string GetDefectId(string createDefectResponseURL)
{
if (!String.IsNullOrEmpty(createDefectResponseURL))
{
string defectId = createDefectResponseURL.Substring(createDefectResponseURL.LastIndexOf('/') + 1, (createDefectResponseURL.Length - (createDefectResponseURL.LastIndexOf('/') + 1)));
return defectId;
}
return null;
}
}
Thank you in advance !
Best regards,
Gary