Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/passman.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbinsky <timo@binsky.org>2021-03-28 22:42:32 +0300
committerbinsky <timo@binsky.org>2021-03-29 20:54:21 +0300
commit1e15710bdb6ff654409b8e9f2a26e556f4c292b1 (patch)
tree1a30dc3232f526aadaae24261f83fbe626817a3e /controller
parent5eece67ea690e37da13c9e61202943ddcf48e595 (diff)
fix throwing an exception on icon request with an invalid url, return the default icon instead
Diffstat (limited to 'controller')
-rw-r--r--controller/iconcontroller.php56
1 files changed, 29 insertions, 27 deletions
diff --git a/controller/iconcontroller.php b/controller/iconcontroller.php
index 97a24813..6be9a8a0 100644
--- a/controller/iconcontroller.php
+++ b/controller/iconcontroller.php
@@ -13,17 +13,14 @@ namespace OCA\Passman\Controller;
use Doctrine\DBAL\Exception\DriverException;
use OC\App\AppManager;
+use OCA\Passman\Service\CredentialService;
use OCA\Passman\Service\IconService;
use OCA\Passman\Utility\Utils;
+use OCP\AppFramework\ApiController;
use OCP\AppFramework\Db\DoesNotExistException;
use OCP\AppFramework\Http\DataDownloadResponse;
-use OCP\AppFramework\Http\Response;
-use OCP\IConfig;
-use OCP\IRequest;
use OCP\AppFramework\Http\JSONResponse;
-use OCP\AppFramework\ApiController;
-use OCA\Passman\Service\CredentialService;
-use \OCP\App;
+use OCP\IRequest;
use OCP\IURLGenerator;
class IconController extends ApiController {
@@ -33,11 +30,11 @@ class IconController extends ApiController {
private $urlGenerator;
public function __construct($AppName,
- IRequest $request,
- $UserId,
- CredentialService $credentialService,
- AppManager $am,
- IURLGenerator $urlGenerator
+ IRequest $request,
+ $UserId,
+ CredentialService $credentialService,
+ AppManager $am,
+ IURLGenerator $urlGenerator
) {
parent::__construct(
$AppName,
@@ -57,7 +54,7 @@ class IconController extends ApiController {
* @NoCSRFRequired
*/
public function getSingleIcon($base64Url) {
- $url = base64_decode(str_replace('_','/', $base64Url));
+ $url = base64_decode(str_replace('_', '/', $base64Url));
if (!preg_match("~^(?:f|ht)tps?://~i", $url)) {
$url = "http://" . $url;
}
@@ -66,8 +63,8 @@ class IconController extends ApiController {
$icon = new IconService($url);
if ($icon->icoExists) {
- $icon_json['type']= $icon->icoType;
- $icon_json['content']= base64_encode($icon->icoData);
+ $icon_json['type'] = $icon->icoType;
+ $icon_json['content'] = base64_encode($icon->icoData);
return new JSONResponse($icon_json);
}
@@ -79,13 +76,13 @@ class IconController extends ApiController {
* @NoCSRFRequired
*/
public function getIcon($base64Url, $credentialId) {
- $url = base64_decode(str_replace('_','/', $base64Url));
+ $url = base64_decode(str_replace('_', '/', $base64Url));
- if($credentialId) {
+ if ($credentialId && $credentialId != "null") {
try {
$credential = $this->credentialService->getCredentialById($credentialId, $this->userId);
$credential = $credential->jsonSerialize();
- } catch (DoesNotExistException $e){
+ } catch (DoesNotExistException $e) {
// Credential is not found, continue
$credential = false;
}
@@ -95,15 +92,20 @@ class IconController extends ApiController {
$url = "http://" . $url;
}
- $icon = new IconService($url);
-
$data = base64_decode("iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAABHVBMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADF3oJhAAAAXnRSTlMAAQIDBAUGBwgJCwwOEBITFBUWFxgaHB4hJCUnKissMDI0ODs9PkFCQ0RNUVJWV1lbXF1hY2Zna2xtcXh7f4KDhYmUm52lq62vsLW3ucHFyszO0dPV197i7/H3+fv9358zuQAAAWdJREFUWMPtldlWwjAURdPWogyKOKM4z0NRQRRHnAdE0QoI1eb/P8OnmzYlSZs+unIes+/ZbdOuFCFuBmc2Dk+qpe18EsVIptTGJJ3jrGR99B4H8jQlUTfOMSM3ZtT+SAsz8z0ZrZ//wZy4S1H6C1iQtfD+tCsS4EJYP9kV9rGTCRE0fMOfxZypITO7++5b/NCE/S3fx7PsLc9/eeuWqK/3vA9ngAJ3BPwmBIIdMnYbvNNLgo4Egg4MvelBpD0D6/F3YYJcJd0PEw7AWa6gCCNnLLoPtMoVPMJIikVNoE2uAN6BzcZ1MPA2wRA+AUIHwHkn1BAM7LH5OvBhjiAFA6tsXgCe4wjSMLDC5nPAx5Xg3wrGylfk1GlcM/MC/KFW6fvRVbBkLuj+omwf401KUJcXtCiBIy+gT4UYfawrgRIogRIogRLwBG4MAfVnsuX7XX8fWfKCU0qgvcr2mwaiDZYtsw/tMtnCP4F4Y01BhTeiAAAAAElFTkSuQmCC");
$type = 'png';
-
- if ($icon->icoExists) {
- $data = $icon->icoData;
- $type = $icon->icoType;
+
+ try {
+ $icon = new IconService($url);
+ if ($icon->icoExists) {
+ $data = $icon->icoData;
+ $type = $icon->icoType;
+ }
+ } catch (\InvalidArgumentException $e) {
+ //no need to do stuff in catch
+ //if IconService fails the predefined $data and $type are used
}
+
if (isset($credential) && $credential['user_id'] == $this->userId) {
$iconData = [
'type' => ($type) ? $type : 'x-icon',
@@ -111,7 +113,7 @@ class IconController extends ApiController {
];
$credential['icon'] = json_encode($iconData);
try {
- if($credential) {
+ if ($credential) {
$this->credentialService->updateCredential($credential);
}
} catch (DriverException $exception) {
@@ -152,12 +154,12 @@ class IconController extends ApiController {
$pack = explode('/', $path[1])[2];
$mime = mime_content_type($iconPath);
//print_r($path);
- if($mime !== 'directory') {
+ if ($mime !== 'directory') {
$icon = [];
$icon['mimetype'] = mime_content_type($iconPath);
$icon['url'] = $this->urlGenerator->linkTo('passman', $path[1]);
$icon['pack'] = $pack;
- if(!isset($icons[$pack])){
+ if (!isset($icons[$pack])) {
$icons[$pack] = [];
}
$icons[$pack][] = $icon;
@@ -165,4 +167,4 @@ class IconController extends ApiController {
}
return new JSONResponse($icons);
}
-} \ No newline at end of file
+}