Support http connections, allow pasting to upload

This commit is contained in:
rubikscraft 2022-08-29 20:30:24 +02:00
parent ba7f1db412
commit 0e2388f808
No known key found for this signature in database
GPG key ID: 1463EBE9200A5CD4
6 changed files with 53 additions and 9 deletions

View file

@ -12,7 +12,6 @@ export const HelmetOptions: FastifyHelmetOptions = {
'object-src': ["'none'"],
'script-src': ["'self'", "'unsafe-inline'"],
'style-src': ["'self'", "'unsafe-inline'"],
'upgrade-insecure-requests': [],
},
useDefaults: false,
reportOnly: false,

View file

@ -2,7 +2,7 @@
<ngx-dropzone *ngIf="canUpload" (change)="onSelect($event)">
<div class="centered">
<h1>Upload Image</h1>
<p>Drag and drop an image here, or click to select an image</p>
<p>Drag and drop / paste an image here, or click to select an image</p>
</div>
</ngx-dropzone>

View file

@ -1,9 +1,10 @@
import { Component, OnInit } from '@angular/core';
import { Component, HostListener, OnInit } from '@angular/core';
import { Router } from '@angular/router';
import { AutoUnsubscribe } from 'ngx-auto-unsubscribe-decorator';
import { NgxDropzoneChangeEvent } from 'ngx-dropzone';
import { Permission } from 'picsur-shared/dist/dto/permissions.enum';
import { debounceTime } from 'rxjs';
import { SnackBarType } from 'src/app/models/dto/snack-bar-type.dto';
import { PermissionService } from 'src/app/services/api/permission.service';
import { UtilService } from 'src/app/util/util-module/util.service';
import { ProcessingViewMeta } from '../../models/dto/processing-view-meta.dto';
@ -46,4 +47,45 @@ export class UploadComponent implements OnInit {
};
this.router.navigate(['/processing'], { state: metadata });
}
@HostListener('document:paste', ['$event'])
onPaste(event: ClipboardEvent) {
const items = event.clipboardData?.items;
if (!items) {
this.utilService.showSnackBar('Your clipboard is empty');
return;
}
const filteredItems = Array.from(items).filter(
(item) => item.kind === 'file',
);
if (filteredItems.length === 0) {
this.utilService.showSnackBar(
'Your clipboard does not contain any images',
);
return;
}
const blob = filteredItems[0].getAsFile();
if (!blob) {
this.utilService.showSnackBar(
'Error getting image from clipboard',
SnackBarType.Error,
);
return;
}
if (filteredItems.length > 1) {
this.utilService.showSnackBar(
'You pasted multiple images, only one has been uploaded',
);
}
const metadata: ProcessingViewMeta = {
imageFile: blob,
};
this.router.navigate(['/processing'], { state: metadata });
}
}

View file

@ -2,6 +2,7 @@
{
"extends": "../tsconfig.base.json",
"compileOnSave": false,
"compilerOptions": {
"baseUrl": "./",
@ -19,6 +20,8 @@
"enableI18nLegacyMessageIdFormat": false,
"strictInjectionParameters": true,
"strictInputAccessModifiers": true,
"strictTemplates": true
"strictTemplates": true,
"enableIvy": true,
}
}

View file

@ -19,7 +19,7 @@
"resolutions": {
"fastify": "^4.5.2",
"terser": "^5.14.2",
"typeorm": "0.3.7",
"typeorm": "^0.3.9",
"fastify-static": "npm:@fastify/static@*",
"fastify-formbody": "npm:@fastify/formbody@*",
"minimist": "npm:minimist-lite@*"

View file

@ -11566,9 +11566,9 @@ __metadata:
languageName: node
linkType: hard
"typeorm@npm:0.3.7":
version: 0.3.7
resolution: "typeorm@npm:0.3.7"
"typeorm@npm:^0.3.9":
version: 0.3.9
resolution: "typeorm@npm:0.3.9"
dependencies:
"@sqltools/formatter": ^1.2.2
app-root-path: ^3.0.0
@ -11644,7 +11644,7 @@ __metadata:
typeorm: cli.js
typeorm-ts-node-commonjs: cli-ts-node-commonjs.js
typeorm-ts-node-esm: cli-ts-node-esm.js
checksum: b9a709fa1c103c98340ff055419f5de7fde478e35f246b2f6b212ad6c8954085f347c5a97ed2d94634cf9d51577035d8d71c4c4ccfd58b5f7a9579f434e71802
checksum: 5de1e5ac352640ea0b4c41cdfc4da2d3715709e8d0899dc7ec74a81a879dd22d0f99bd8244be3fc6353c2574e6657d3d863b4e4f0337278bb098e81afdacc473
languageName: node
linkType: hard