<?xml version="1.0" encoding="utf-8"?>
<ConnectionManager Name="Netvisor" RuntimeVersion="" Help="https://www.cozyroc.com/ssis/netvisor-connection" xmlns="http://www.cozyroc.com/schema/rcm-config-1.0.xsd">
	<Service EndPoint="https://isvapi.netvisor.fi" />

	<Authentication Cached="false">
		<Documentation>https://support.netvisor.fi/en/support/solutions/articles/77000557880-api-authentication</Documentation>

		<User>
			<Parameter Name="sender">
				<Documentation>Required. Specify sender.</Documentation>
			</Parameter>

			<Parameter Name="customerId">
				<Documentation>Required. Specify customerId.</Documentation>
			</Parameter>

			<Parameter Name="customerKey" Type="password">
				<Documentation>Required. Specify customerKey.</Documentation>
			</Parameter>

			<Parameter Name="partnerId">
				<Documentation>Required. Specify partnerId.</Documentation>
			</Parameter>

			<Parameter Name="partnerKey" Type="password">
				<Documentation>Required. Specify partnerKey.</Documentation>
			</Parameter>

			<Parameter Name="organisationId">
				<Documentation>Required. Specify organisationId.</Documentation>
			</Parameter>

			<Parameter Name="language">
				<Documentation>Required. Specify language.</Documentation>
			</Parameter>
		</User>

		<Test Url="/dimensionlist.nv" />

		<Parameters>
			<Parameter Name="headers" Value="{{=Netvisor.getAuthentication(connection.serverHost + request.url)}}" Type="HttpHeader" />
		</Parameters>
	</Authentication>

	<Resources>
		<Template>
			<Field Name="ShortText" DataType="DT_WSTR" Length="255" />
			<Field Name="LongText" DataType="DT_WSTR" Length="1000" />
			<Field Name="Id" DataType="DT_I8" />
			<Field Name="Number" DataType="DT_I4" />
			<Field Name="DateTime" DataType="DT_DBTIMESTAMP" />
			<Field Name="Date" DataType="DT_DBDATE" />

			<Resource Name="Base">
				<Read>
					<Parameters>
						<Parameter Name="_includeUserParameters" Value="{{=parameters}}" />
					</Parameters>
				</Read>

				<Create Method="POST">
					<Parameters>
						<Parameter Name="_includeUserParameters" Value="{{=parameters}}" />
						<Parameter Name="application/json" Value="{{=item}}" Type="Body" />
					</Parameters>
				</Create>

				<Update Method="PUT">
					<Parameters>
						<Parameter Name="_includeUserParameters" Value="{{=parameters}}" />
						<Parameter Name="application/json" Value="{{=item}}" Type="Body" />
					</Parameters>
				</Update>

				<Delete Method="DELETE" />
			</Resource>
		</Template>

		<Resource Name="Account list" Template="Base">
			<Fields>
				<Field Name="NetvisorKey" Template="ShortText" />
				<Field Name="Number" Template="ShortText" />
				<Field Name="Name" Template="ShortText" />
				<Field Name="AccountType" Template="ShortText" />
				<Field Name="FatherNetvisorKey" Template="ShortText" />
				<Field Name="IsActive" Template="ShortText" />
				<Field Name="IsCumulative" Template="ShortText" />
				<Field Name="Sort" Template="ShortText" />
				<Field Name="EndSort" Template="ShortText" />
				<Field Name="IsNaturalNegative" Template="ShortText" />
			</Fields>

			<Read Url="/accountlist.nv" Id="Accounts" Result="{{=response.Root.AccountList.Accounts.Account}}">
				<Documentation>https://support.netvisor.fi/en/support/solutions/articles/77000554190-get-whole-account-list-accountlist-nv</Documentation>
			</Read>
		</Resource>
	</Resources>
	<Script>
		<Module Name="Main">
			<![CDATA[
require('underscore');
require('underscore.string');
_.mixin(s.exports());
require('sha256');
require('date.format');

var Netvisor = {};


///////////////////////////////////////////////////////////////////////////////
Netvisor.getAuthentication = function(url) {
	let timestamp = dateFormat(new Date().getTime(), 'yyyy-mm-dd HH:MM:ss', true);
	let transactionId = 'TRANSID' + _.lpad((Math.random() * 99999999 | 0).toString(), 12, '0');

	let hash = hex_sha256([
		url, connection.user.sender, connection.user.customerId, timestamp,
		connection.user.language, connection.user.organisationId, transactionId,
		connection.user.customerKey, connection.user.partnerKey].join('&'));

	return {
		'X-Netvisor-Authentication-Sender': connection.user.sender,
		'X-Netvisor-Authentication-CustomerId': connection.user.customerId,
		'X-Netvisor-Authentication-PartnerId': connection.user.partnerId,
		'X-Netvisor-Organisation-ID': connection.user.organisationId,
		'X-Netvisor-Interface-Language': connection.user.language,
		'X-Netvisor-Authentication-Timestamp': timestamp,
		'X-Netvisor-Authentication-TransactionId': transactionId,
		'X-Netvisor-Authentication-MAC': hash,
		'X-Netvisor-Authentication-MACHashCalculationAlgorithm': 'SHA256'
	};
}
]]>
		</Module>
	</Script>
</ConnectionManager>
