-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCRMIntegrationProvider.cs
More file actions
157 lines (138 loc) · 4.8 KB
/
Copy pathCRMIntegrationProvider.cs
File metadata and controls
157 lines (138 loc) · 4.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
using FamilIntegrationCore.Models;
using System;
using System.IO;
using System.Net;
namespace FamilIntegrationService.Providers
{
public class CRMIntegrationProvider
{
private string _login;
private string _password;
private string _uri;
private CookieContainer _bpmCookieContainer;
private string _csrf;
private bool _useLocalCookie;
public CRMIntegrationProvider(bool useLocalCookie = false)
{
_useLocalCookie = useLocalCookie;
GlobalCacheReader.GetValue(GlobalCacheReader.CacheKeys.BPMLogin, out _login);
GlobalCacheReader.GetValue(GlobalCacheReader.CacheKeys.BPMPassword, out _password);
GlobalCacheReader.GetValue(GlobalCacheReader.CacheKeys.BPMUri, out _uri);
}
//public void SendSaleToCRM(Guid saleId, bool isNeedCreateProject = false)
//{
// var context = new JiraMonitorContext();
// var sale = context.Sale.FirstOrDefault(s => s.Id == saleId);
// if (sale != null)
// {
// MakeRequest("PTTrackerIntegrationService/UpdateOpportunity", String.Format(@"{{""oppId"": ""{0}"", ""statusId"": ""{1}"", ""resultId"":""{2}"", ""isNeedCreateProject"":""{3}""}}", sale.CrmId, sale.StatusId, sale.ResultId ?? Guid.Empty, isNeedCreateProject ? "1" : "0"));
// }
//}
public RequestResult MakeRequest(string bpmServiceUri, string body)
{
HttpWebRequest req;
CookieContainer bpmCookieContainer = null;
if (_useLocalCookie)
{
if (_bpmCookieContainer == null)
{
_csrf = Authorize(out req, out _bpmCookieContainer);
bpmCookieContainer = _bpmCookieContainer;
}
}
else
{
if (!GlobalCacheReader.GetValue(GlobalCacheReader.CacheKeys.BPMCookie, out bpmCookieContainer))
{
var csrf = Authorize(out req, out bpmCookieContainer);
GlobalCacheReader.SetTemporaryValue(GlobalCacheReader.CacheKeys.BPMCookie, bpmCookieContainer, TimeSpan.FromMinutes(20));
GlobalCacheReader.SetTemporaryValue(GlobalCacheReader.CacheKeys.BPMCSRF, csrf, TimeSpan.FromMinutes(20));
}
}
return Request(bpmServiceUri, body, out req, bpmCookieContainer);
}
private string Authorize(out HttpWebRequest req, out CookieContainer bpmCookieContainer)
{
//Вызов сервиса с авторизацией
req = (HttpWebRequest)WebRequest.Create(String.Format("{0}/ServiceModel/AuthService.svc/Login", _uri));
req.Method = "POST";
req.ContentType = "application/json";
req.Accept = "application/json";
bpmCookieContainer = new CookieContainer();
req.CookieContainer = bpmCookieContainer;
req.Credentials =
System.Net.CredentialCache.DefaultCredentials;
req.Proxy.Credentials =
System.Net.CredentialCache.DefaultCredentials;
using (var streamWriter = new StreamWriter(req.GetRequestStream()))
{
string json = "{\"UserName\":\"" + _login + "\",\"UserPassword\":\"" + _password + "\"}";
streamWriter.Write(json);
streamWriter.Flush();
streamWriter.Close();
}
var httpResponse = req.GetResponse();
var cookies = bpmCookieContainer.GetCookies(new Uri(_uri));
try
{
return cookies["BPMCSRF"].Value;
}
catch
{
return String.Empty;
}
}
private RequestResult Request(string bpmServiceUri, string body, out HttpWebRequest req, CookieContainer bpmCookieContainer)
{
req = (HttpWebRequest)WebRequest.Create(String.Format("{0}/0/rest/{1}", _uri, bpmServiceUri));
req.Method = "POST";
req.ContentType = "application/json";
req.Accept = "application/json";
req.CookieContainer = bpmCookieContainer;
req.Credentials = System.Net.CredentialCache.DefaultCredentials;
req.Proxy.Credentials = System.Net.CredentialCache.DefaultCredentials;
req.Timeout = 10 * 1000 * 60;
var csrfToken = String.Empty;
if (_useLocalCookie) csrfToken = _csrf;
else GlobalCacheReader.GetValue(GlobalCacheReader.CacheKeys.BPMCSRF, out csrfToken);
if (!String.IsNullOrEmpty(csrfToken))
{
req.Headers.Add("BPMCSRF", csrfToken);
}
using (var requestStream = req.GetRequestStream())
{
using (var streamWriter = new StreamWriter(requestStream))
{
streamWriter.Write(body);
streamWriter.Flush();
streamWriter.Close();
}
}
try
{
using (var response = req.GetResponse())
{
using (var responseStream = response.GetResponseStream())
{
using (var streamReader = new StreamReader(responseStream))
{
return new RequestResult() { IsSuccess = true, ResponseStr = streamReader.ReadToEnd() };
}
}
}
}
catch (WebException e)
{
if (e.Response == null)
{
return new RequestResult() { IsSuccess = false, ResponseStr = e.Message + " null response" };
}
using (var streamReader = new StreamReader(e.Response.GetResponseStream()))
{
var res = streamReader.ReadToEnd();
return new RequestResult() { IsSuccess = false, ResponseStr = e.Message + " " + res };
}
}
}
}
}