dev #32
@@ -25,6 +25,10 @@ class HashesUpload extends Component
|
|||||||
*/
|
*/
|
||||||
public array $hashes = [];
|
public array $hashes = [];
|
||||||
|
|
||||||
|
public ?string $manualFilename = "";
|
||||||
|
public ?string $manualCRC32 = "";
|
||||||
|
public ?string $manualSHA1 = "";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Prepare old hashes.
|
* Prepare old hashes.
|
||||||
*
|
*
|
||||||
@@ -87,6 +91,41 @@ class HashesUpload extends Component
|
|||||||
array_splice($this->hashes, $index, 1);
|
array_splice($this->hashes, $index, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function checkCrc32($attribute, $value, $fail)
|
||||||
|
{
|
||||||
|
if (!preg_match('/^[a-f0-9]{8}$/i', $value)) {
|
||||||
|
$fail("CRC32 is invalid");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private function checkSha1($attribute, $value, $fail)
|
||||||
|
{
|
||||||
|
if (!preg_match('/^[a-f0-9]{40}$/i', $value)) {
|
||||||
|
$fail("SHA1 is invalid");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function addManualHash()
|
||||||
|
{
|
||||||
|
$this->validate([
|
||||||
|
'manualFilename' => "required|string|max:512",
|
||||||
|
'manualCRC32' => ['required', 'string', 'max:512', $this->checkCrc32(...) ],
|
||||||
|
'manualSHA1' => ['required', 'string', 'max:512', $this->checkSha1(...) ],
|
||||||
|
], [
|
||||||
|
'manualFilename.required' => 'Please enter a filename.',
|
||||||
|
'manualCRC32.required' => 'Please enter a crc32.',
|
||||||
|
'manualSHA1.required' => 'Please enter a SHA1.',
|
||||||
|
'manualFilename.max' => 'Filename has to be less than 512 characters.',
|
||||||
|
'manualCRC32.max' => 'CRC32 has to be less than 512 characters.',
|
||||||
|
'manualSHA1.max' => 'SHA1 has to be less than 512 characters.',
|
||||||
|
]);
|
||||||
|
|
||||||
|
$this->addHash( $this->manualFilename, $this->manualCRC32, $this->manualSHA1 );
|
||||||
|
|
||||||
|
$this->reset(['manualFilename','manualCRC32','manualSHA1']);
|
||||||
|
$this->dispatch('close-manual-modal');
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public function render(): View
|
public function render(): View
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -14,6 +14,11 @@ export function HashesManager( wire ) {
|
|||||||
*/
|
*/
|
||||||
isCalculating: false,
|
isCalculating: false,
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
manualHashesModal: false,
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* An error on hash calculation.
|
* An error on hash calculation.
|
||||||
* @type {any|null}
|
* @type {any|null}
|
||||||
|
|||||||
@@ -59,7 +59,55 @@
|
|||||||
|
|
||||||
<span x-show="error" x-text="error" class="form-error-text" x-cloak></span>
|
<span x-show="error" x-text="error" class="form-error-text" x-cloak></span>
|
||||||
|
|
||||||
<button type="button" class="btn primary" :disabled="isCalculating" @click="handleSubmitFile()">Add Hashes</button>
|
<button type="button" class="btn" :disabled="isCalculating" @click="manualHashesModal = true;">Provide hash manually</button>
|
||||||
|
<button type="button" class="btn primary" :disabled="isCalculating" @click="handleSubmitFile()">Add hashes</button>
|
||||||
</div>
|
</div>
|
||||||
|
<div
|
||||||
|
class="modal-overlay"
|
||||||
|
x-show="manualHashesModal"
|
||||||
|
x-effect="manualHashesModal && $nextTick(() => window.refreshIcons($el))"
|
||||||
|
x-cloak
|
||||||
|
x-transition.opacity.duration.300ms
|
||||||
|
@keydown.escape.window="manualHashesModal = false"
|
||||||
|
@focus="window.refreshIcons($el)"
|
||||||
|
@close-manual-modal.window="manualHashesModal = false"
|
||||||
|
>
|
||||||
|
<div @click.outside="manualHashesModal = false" class="modal-window">
|
||||||
|
|
||||||
|
<div class="modal-header">
|
||||||
|
<span class="modal-title">Provide hash manually</span>
|
||||||
|
<button type="button" @click="manualHashesModal = false" class="modal-close">
|
||||||
|
<i data-lucide="x" size="18"></i>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="modal-content">
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="form-label">Filename</label>
|
||||||
|
<input type="text" wire:model="manualFilename" class="form-input" maxlength="512">
|
||||||
|
@error('manualFilename') <span class="form-error-text">{{ $message }}</span> @enderror
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="form-label">CRC32</label>
|
||||||
|
<input type="text" wire:model="manualCRC32" class="form-input" maxlength="512">
|
||||||
|
@error('manualCRC32') <span class="form-error-text">{{ $message }}</span> @enderror
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="form-label">SHA-1</label>
|
||||||
|
<input type="text" wire:model="manualSHA1" class="form-input" maxlength="512">
|
||||||
|
@error('manualSHA1') <span class="form-error-text">{{ $message }}</span> @enderror
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<button type="button" class="btn primary" style="width: 100%; justify-content: center;" wire:click="addManualHash" wire:loading.attr="disabled">
|
||||||
|
<i data-lucide="plus" size="14"></i> Add
|
||||||
|
</button>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
|
|
||||||
<div class="modal-header">
|
<div class="modal-header">
|
||||||
<span class="modal-title">Write a review</span>
|
<span class="modal-title">Write a review</span>
|
||||||
<button @click="reviewModalOpen = false" class="modal-close">
|
<button type="button" @click="reviewModalOpen = false" class="modal-close">
|
||||||
<i data-lucide="x" size="18"></i>
|
<i data-lucide="x" size="18"></i>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Reference in New Issue
Block a user