9 namespace Fossology\UI\Page;
17 use GuzzleHttp\Client;
18 use GuzzleHttp\Exception\GuzzleException;
19 use GuzzleHttp\Exception\RequestException;
20 use Symfony\Component\HttpFoundation\File\UploadedFile;
21 use Symfony\Component\HttpFoundation\Request;
22 use Symfony\Component\HttpFoundation\Response;
23 use League\OAuth2\Client\Provider\GenericProvider;
30 const NAME =
"admin_obligation_from_csv";
31 const KEY_UPLOAD_MAX_FILESIZE =
'upload_max_filesize';
32 const FILE_INPUT_NAME =
'file_input';
33 const FILE_INPUT_NAME_V2 =
'fileInput';
38 private $oidcProvider;
45 function __construct()
48 parent::__construct(self::NAME, array(
49 self::TITLE =>
"Admin Obligation Import",
50 self::MENU_LIST =>
"Admin::Obligation Admin::Obligation Import",
51 self::REQUIRES_LOGIN =>
true,
55 $this->obligationsCsvImport = $GLOBALS[
'container']->get(
'app.obligation_csv_import');
57 $this->configuration = [
58 'uri' =>
trim($this->
sysconfig[
'SYSCONFIG'][
'LicenseDBBaseURL']),
59 'content' =>
trim($this->
sysconfig[
'SYSCONFIG'][
'LicenseDBContentObligations']),
60 'health' =>
trim($this->
sysconfig[
'SYSCONFIG'][
'LicenseDBHealth']),
61 'token' => empty(
trim($this->
sysconfig[
'SYSCONFIG'][
'LicenseDBToken'])) ? null :
trim($this->
sysconfig[
'SYSCONFIG'][
'LicenseDBToken']),
64 if ($this->configuration[
'token'] ==
null) {
65 $this->oidcProvider =
new GenericProvider([
66 "clientId" =>
trim($this->
sysconfig[
'SYSCONFIG'][
'OidcM2MAppId']),
67 "clientSecret" =>
trim($this->
sysconfig[
'SYSCONFIG'][
'OidcM2MSecret']),
68 "urlAuthorize" =>
trim($this->
sysconfig[
'SYSCONFIG'][
'OidcM2MAuthorizeURL']),
69 "urlAccessToken" =>
trim($this->
sysconfig[
'SYSCONFIG'][
'OidcM2MAccessTokenURL']),
70 "urlResourceOwnerDetails" =>
trim($this->
sysconfig[
'SYSCONFIG'][
'OidcM2MResourceOwnerURL']),
73 if (isset($this->
sysconfig[
'SYSCONFIG'][
'OidcM2MScope'])) {
74 $this->configuration[
'scope'] =
trim($this->
sysconfig[
'SYSCONFIG'][
'OidcM2MScope']);
77 $this->oidcProvider =
null;
86 if ($apiVersion == ApiVersion::V2) {
87 return $this::FILE_INPUT_NAME_V2;
89 return $this::FILE_INPUT_NAME;
97 protected function handle(Request $request)
100 if (!$request->isMethod(
'POST')) {
101 $getHealth = $this->configuration[
'uri'] . $this->configuration[
'health'];
105 if ($request->isMethod(
'POST')) {
106 if ($request->get(
'importFrom') ===
'licensedb') {
107 $startTime = microtime(
true);
109 $fetchLicenseTime = microtime(
true) - $startTime;
110 $this->fileLogger->debug(
"Fetching Obligations and Check time took: " . sprintf(
"%0.3fms", 1000 * $fetchLicenseTime));
111 $this->fileLogger->debug(
"****************** Message From LicenseDB import [" . date(
'Y-m-d H:i:s') .
"] ******************");
112 $this->fileLogger->debug($vars[
"message"]);
113 $this->fileLogger->debug(
"****************** End Message From LicenseDB import ******************");
115 $uploadFile = $request->files->get(self::FILE_INPUT_NAME);
116 $delimiter = $request->get(
'delimiter') ?:
',';
117 $enclosure = $request->get(
'enclosure') ?:
'"';
119 $vars[
'message'] = is_array($result) ? $result[1] : $result;
123 $vars[self::KEY_UPLOAD_MAX_FILESIZE] = ini_get(self::KEY_UPLOAD_MAX_FILESIZE);
124 $vars[
'baseUrl'] = $request->getBaseUrl();
125 $vars[
'license_csv_import'] =
false;
127 if (!empty(
trim($this->configuration[
'uri']))) {
128 $vars[
'baseURL'] = !empty($this->configuration[
'uri']);
129 $vars[
'tokenConfig'] = !empty($this->configuration[
'token']) || $this->oidcProvider !=
null;
130 $vars[
'exportEndpoint'] = !empty($this->configuration[
'content']);
131 return $this->
render(
"admin_license_from_licensedb.html.twig", $this->mergeWithDefault($vars));
133 return $this->
render(
"admin_license_from_csv.html.twig", $this->mergeWithDefault($vars));
148 $finalURL = $this->configuration[
'uri'] . $this->configuration[
'content'];
150 $startTimeReq = microtime(
true);
153 if ($this->configuration[
'token'] !=
null) {
154 $accessToken = $this->configuration[
'token'];
157 if (isset($this->configuration[
'scope'])) {
158 $options[
'scope'] = $this->configuration[
'scope'];
160 $accessToken = $this->oidcProvider->getAccessToken(
'client_credentials', $options);
163 $response = $guzzleClient->get($finalURL);
164 $fetchLicenseTimeReq = microtime(
true) - $startTimeReq;
165 $this->fileLogger->debug(
"LicenseDB req:' took " . sprintf(
"%0.3fms", 1000 * $fetchLicenseTimeReq));
168 return $this->obligationsCsvImport->importJsonData($data, $msg);
170 return $msg . $e->getMessage();
171 }
catch (RequestException | GuzzleException $e) {
172 return $msg . _(
'Something Went Wrong, check if host is accessible') .
': ' . $e->getMessage();
180 public function handleFileUpload($uploadedFile, $delimiter =
',', $enclosure =
'"', $fromRest =
false)
183 if (!($uploadedFile instanceof UploadedFile)) {
184 $errMsg = _(
"No file selected");
185 } elseif ($uploadedFile->getSize() == 0 && $uploadedFile->getError() == 0) {
186 $errMsg = _(
"Larger than upload_max_filesize ") . ini_get(self::KEY_UPLOAD_MAX_FILESIZE);
188 $uploadedFile->getClientOriginalExtension() !=
'csv'
189 && $uploadedFile->getClientOriginalExtension() !=
'json'
191 $errMsg = _(
'Invalid extension ') .
192 $uploadedFile->getClientOriginalExtension() .
' of file ' .
193 $uploadedFile->getClientOriginalName();
195 if (!empty($errMsg)) {
197 return array(
false, $errMsg, 400);
201 $this->obligationsCsvImport->setDelimiter($delimiter);
202 $this->obligationsCsvImport->setEnclosure($enclosure);
204 return array(
true, $this->obligationsCsvImport->handleFile($uploadedFile->getRealPath(), $uploadedFile->getClientOriginalExtension()), 200);
208 register_plugin(
new AdminObligationFromCSV());
Helper class for Obligation CSV Import.
Contains the constants and helpers for authentication of user.
Exception when Guzzle client response is not as expected.
render($templateName, $vars=null, $headers=null)
static processHttpResponse($response)
static getGuzzleClient(array $SysConf, string $baseUri, string $token="")
static checkLicenseDBHealth(string $getHealth, $guzzleClient)
Upload a file from the users computer using the UI.
getFileInputName($apiVersion=ApiVersion::V1)
handleFileUpload($uploadedFile, $delimiter=',', $enclosure='"', $fromRest = false)
handleLicenseDbObligationImport()
char * trim(char *ptext)
Trimming whitespace.