Manager
A communication between a 3rd Party Application (Client) and Topal (Server) need to pass additional information between client and server.
Such information is passed via HTTP Header respectively via HTTP request or response calls.
The following code sample aggregates various information required with every request and response as Client, Fiscal year, token etc.
public class Manager
{
HttpClient httpclient = null;
Credentials credentials = null;
FormUrlEncodedContent loginContent = null;
string token = "";
Client _currentClient = null;
FiscalYear _currentFiscalYear = null;
public Manager()
{
ServicePointManager.ServerCertificateValidationCallback +=
(sender, cert, chain, sslPolicyErrors) => true;
credentials = new Credentials();
httpclient = new HttpClient();
string host = Configuration.host;
string api_version = Configuration.api_version;
string baseurl = host + api_version;
httpclient.BaseAddress = new Uri(baseurl);
loginContent = new FormUrlEncodedContent(credentials.loginParameters);
token = this.getToken(loginContent);
if (token.Equals("")) {
string message = "Can't retrieve token";
Assert.AreEqual(true, false, message);
}
this.httpClient = httpclient;
this.Token = token;
httpClient.DefaultRequestHeaders.Add("Authorization", "Bearer" + " " + token);
this.set_current_client(httpClient, Configuration.defaultClient);
this.set_current_fiscalYear(httpClient, Configuration.defaultFiscalyear);
}
public Manager(string client_name, string fiscalyear_name)
{
ServicePointManager.ServerCertificateValidationCallback +=
(sender, cert, chain, sslPolicyErrors) => true;
credentials = new Credentials();
httpclient = new HttpClient();
string host = Configuration.host;
string api_version = Configuration.api_version;
string baseurl = host + api_version;
httpclient.BaseAddress = new Uri(baseurl);
loginContent = new FormUrlEncodedContent(credentials.loginParameters);
token = this.getToken(loginContent);
this.httpClient = httpclient;
this.Token = token;
httpClient.DefaultRequestHeaders.Add("Authorization", "Bearer " + token);
this.set_current_client(httpClient, client_name);
this.set_current_fiscalYear(httpClient, fiscalyear_name);
}
public HttpClient httpClient { get; set; }
private string Token { get; set; }
private string getToken(FormUrlEncodedContent loginContent)
{
HttpResponseMessage response = null;
try
{
token = "";
response = httpclient.PostAsync("Token", loginContent).Result;
if (response.StatusCode == HttpStatusCode.OK)
{
var tokenResponse = response.Content.ReadAsStringAsync().Result;
dynamic accessToken = JsonConvert.DeserializeObject(tokenResponse);
token = accessToken.access_token;
}
}
catch (Exception ex)
{
Console.WriteLine("Exception information: {0}", ex);
}
return token;
}
public void set_current_client(HttpClient httpClient, string client_name)
{
var response = httpClient.GetAsync(string.Format("clients")).Result;
var clients = JsonConvert.DeserializeObject>(response.Content.ReadAsStringAsync().Result);
Client client = clients.SingleOrDefault(c => (c.name == client_name));
if (client != null)
{
this._currentClient = client;
this._currentClient.isCurrent = true;
}
else {
MessageBox.Show("Default Client not found", "Important Message");
}
}
public void set_current_fiscalYear(HttpClient httpClient, string fiscalyearname)
{
IList fiscalyears = _currentClient.fiscalYears;
FiscalYear fiscalyear = fiscalyears.SingleOrDefault(f => (f.name == fiscalyearname));
if (fiscalyear != null) {
this._currentFiscalYear = fiscalyear;
} else {
MessageBox.Show("Default FiscalYear not found", "Important Message");
}
}
public FiscalYear getCurrentFiscalYear() { return _currentFiscalYear; }
public Client getCurrentClient() { return _currentClient; }
}
class Manager:
"""
Manager class
"""
# Constructor
def __init__(self):
self._token = self._gettoken()
self._headers = {'Content-Type': 'application/x-www-form-urlencoded', # 'text/plain',
'Authorization': '{0}'.format(self._token)}
self._currentclient = self._defaultclient()
self._currentfiscalyear = self._defaultfiscalyear()
def _gettoken(self):
"""
Method to retrieve token for a given user
"""
host = Configuration().host
url = '{0}{1}Token'.format(host, Configuration().api_version)
payload = {'grant_type': 'password',
'username': Configuration().username,
'password': Configuration().password,
'localization': Configuration().localization
}
try:
response = requests.post(url, data=payload, headers={'Content-Type': 'text/plain'})
if response.status_code == 200:
token = response.json()
bearer_token = token['token_type'] + ' ' + token['access_token']
else:
bearer_token = None
except Exception as err:
print("Error: {0}".format(err))
bearer_token = None
return bearer_token
def token(self):
"""
Method doc string
"""
return self._token
def headers(self):
"""
Method doc string
"""
return self._headers
def base_url(self):
"""
Method doc string
"""
# return self.__base_url
return Configuration().baseurl
def _defaultclient(self):
"""
Method doc string
"""
url = '{0}clients'.format(self.base_url())
response = requests.get(url, headers=self.headers())
clients = response.json()
defaultclient = Configuration().defaultclient
if clients is not None:
for client in enumerate(clients, start=0):
if client[1]['name'] == defaultclient:
currentclient = client[1]
break
return currentclient
def _defaultfiscalyear(self):
fiscalyears = self._currentclient['fiscalYears']
defaultfiscalyear = Configuration().defaultfiscalyear
if fiscalyears is not None:
for fiscalyear in enumerate(fiscalyears, start=0):
if fiscalyear[1]['name'] == defaultfiscalyear:
currentfiscalyear = fiscalyear[1]
break
return currentfiscalyear
def setcurrentclient(self, client):
"""
Method doc string
"""
self._currentclient = client
def getcurrentclient(self):
"""
Method doc string
"""
client = self._currentclient
return client
def setcurrentfiscalyear(self, fiscalyear):
"""
Method doc string
"""
self._currentfiscalyear = fiscalyear
def getcurrentfiscalyear(self):
"""
Method doc string
"""
fiscalyear = self._currentfiscalyear
return fiscalyear
# TODO -- submission of parameters
def logout(self):
"""
Method doc string
"""
# GET /api/v1/useraccount/logout
url = '{0}useraccounts/logout'.format(self.base_url())
payload = {'Authorization': self._token}
response = requests.get(url, data=payload)
response = response
return True
UNDER CONSTRUCTION