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_license_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 License Import",
50 self::MENU_LIST =>
"Admin::License Admin::License Import",
51 self::REQUIRES_LOGIN =>
true,
55 $this->licenseCsvImport = $GLOBALS[
'container']->get(
'app.license_csv_import');
57 $this->configuration = [
58 'uri' =>
trim($this->
sysconfig[
'SYSCONFIG'][
'LicenseDBBaseURL']),
59 'content' =>
trim($this->
sysconfig[
'SYSCONFIG'][
'LicenseDBContent']),
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 License and Check if exist 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') ?:
'"';
125 $vars[self::KEY_UPLOAD_MAX_FILESIZE] = ini_get(self::KEY_UPLOAD_MAX_FILESIZE);
126 $vars[
'baseUrl'] = $request->getBaseUrl();
127 $vars[
'license_csv_import'] =
true;
129 if (!empty(
trim($this->configuration[
'uri']))) {
130 $vars[
'baseURL'] = !empty($this->configuration[
'uri']);
131 $vars[
'tokenConfig'] = !empty($this->configuration[
'token']) || $this->oidcProvider !=
null;
132 $vars[
'exportEndpoint'] = !empty($this->configuration[
'content']);
133 return $this->
render(
"admin_license_from_licensedb.html.twig", $this->mergeWithDefault($vars));
135 return $this->
render(
"admin_license_from_csv.html.twig", $this->mergeWithDefault($vars));
150 $finalURL = $this->configuration[
'uri'] . $this->configuration[
'content'];
152 $startTimeReq = microtime(
true);
155 if ($this->configuration[
'token'] !=
null) {
156 $accessToken = $this->configuration[
'token'];
159 if (isset($this->configuration[
'scope'])) {
160 $options[
'scope'] = $this->configuration[
'scope'];
162 $accessToken = $this->oidcProvider->getAccessToken(
'client_credentials', $options);
165 $response = $guzzleClient->get($finalURL);
166 $fetchLicenseTimeReq = microtime(
true) - $startTimeReq;
168 $this->fileLogger->debug(
"LicenseDB req:' took " . sprintf(
"%0.3fms", 1000 * $fetchLicenseTimeReq));
170 return $this->licenseCsvImport->importJsonData($data, $msg);
172 return $msg . $e->getMessage();
173 }
catch (RequestException | GuzzleException $e) {
174 return $msg . _(
'Something Went Wrong, check if host is accessible') .
': ' . $e->getMessage();
185 if (!($uploadedFile instanceof UploadedFile)) {
186 $errMsg = _(
"No file selected");
187 } elseif ($uploadedFile->getError() !== UPLOAD_ERR_OK) {
188 $errMsg = $uploadedFile->getErrorMessage();
189 } elseif ($uploadedFile->getSize() == 0 && $uploadedFile->getError() == 0) {
190 $errMsg = _(
"Larger than upload_max_filesize ") .
191 ini_get(self::KEY_UPLOAD_MAX_FILESIZE);
193 $uploadedFile->getClientOriginalExtension() !=
'csv'
194 && $uploadedFile->getClientOriginalExtension() !=
'json'
196 $errMsg = _(
'Invalid file extension ') .
197 $uploadedFile->getClientOriginalExtension() .
' of file ' .
198 $uploadedFile->getClientOriginalName();
200 if (!empty($errMsg)) {
201 return array(
false, $errMsg, 400);
203 $this->licenseCsvImport->setDelimiter($delimiter);
204 $this->licenseCsvImport->setEnclosure($enclosure);
206 return array(
true, $this->licenseCsvImport->handleFile($uploadedFile->getRealPath(), $uploadedFile->getClientOriginalExtension()), 200);
210 register_plugin(
new AdminLicenseFromCSV());
Import licenses from CSV.
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='"')
char * trim(char *ptext)
Trimming whitespace.