Compare commits

..

2 Commits

Author SHA1 Message Date
Notoric 29740fec36 fixed profile table 2025-03-02 20:10:42 +00:00
Notoric da2422e44a minor changes 2025-03-02 19:04:31 +00:00
6 changed files with 57 additions and 25 deletions

View File

@ -14,6 +14,12 @@ class ShortlinkController extends Controller
return response()->json(['error' => 'Unauthorized'], 401); return response()->json(['error' => 'Unauthorized'], 401);
} }
if (strlen($request->url) > 5000) {
return back()->withErrors([
'error' => 'The URL provided is too long'
]);
}
try { try {
$request->validate([ $request->validate([
'url' => 'required|url' 'url' => 'required|url'
@ -41,7 +47,7 @@ class ShortlinkController extends Controller
return redirect("/l/{$shortlink->shortid}"); return redirect("/l/{$shortlink->shortid}");
} catch (\Exception $e) { } catch (\Exception $e) {
return back()->withErrors([ return back()->withErrors([
'error' => $e->getMessage() 'error' => 'An error occurred while creating the shortlink'
]); ]);
} }
} }

View File

@ -40,9 +40,9 @@ class Shortlink extends Model
$this->save(); $this->save();
} }
function generateNewId(int $length = 6): string { function generateNewId(int $length = 5): string {
$characters = 'qwrtypsdfghjklzxcvbnmQWRTYPSDFGHJKLZXCVBNM256789_'; $characters = 'qwrtypsdfghjklzxcvbnmQWRTYPSDFGHJKLZXCVBNM256789_';
// try n x 2 times to generate a new id, if it finds an id, return it, otherwise, try to look for an id of length + 1 // try n x 2 times to generate a new id, if it finds an id, return it, otherwise, try to look for an id of length n + 1
for ($i = 0; $i < $length * 2; $i++) { for ($i = 0; $i < $length * 2; $i++) {
$id = ''; $id = '';
for ($i = 0; $i < $length; $i++) { for ($i = 0; $i < $length; $i++) {

View File

@ -14,7 +14,7 @@ return new class extends Migration
Schema::create('shortlinks', function (Blueprint $table) { Schema::create('shortlinks', function (Blueprint $table) {
$table->id(); $table->id();
$table->string('shortid')->unique(); $table->string('shortid')->unique();
$table->string('destination'); $table->string('destination', 5000);
$table->foreignId('user_id')->references('id')->on('users'); $table->foreignId('user_id')->references('id')->on('users');
$table->integer('max_clicks')->default(0); $table->integer('max_clicks')->default(0);
$table->boolean('deleted')->default(false); $table->boolean('deleted')->default(false);

View File

@ -383,7 +383,7 @@ button {
justify-content: space-between; justify-content: space-between;
} }
#graphs h2, #stats h2 { #graphs h2, #stats h2, #table-container h2 {
margin-bottom: 20px; margin-bottom: 20px;
} }
@ -395,6 +395,7 @@ button {
table { table {
font-size: 1.5em; font-size: 1.5em;
border-collapse: collapse; border-collapse: collapse;
margin-bottom: 40px;
} }
table td, table th { table td, table th {
@ -406,6 +407,14 @@ table td, table th {
table td { table td {
border-top: 1px solid #888; border-top: 1px solid #888;
white-space: nowrap;
}
table td.table-truncate {
white-space: normal;
overflow: hidden;
text-overflow: ellipsis;
word-break: break-all;
} }
table th, table td { table th, table td {
@ -420,8 +429,9 @@ table th:last-child, table td:last-child {
border-right: none; border-right: none;
} }
table { .destination {
margin-bottom: 40px; height: 1.2em;
overflow: hidden;
} }
footer { footer {

View File

@ -36,6 +36,8 @@
<input id="expiry-date" name="expiry-date" type="date" <input id="expiry-date" name="expiry-date" type="date"
@if ($shortlink->expires_at != null) @if ($shortlink->expires_at != null)
value="{{ Carbon\Carbon::parse($shortlink->expires_at)->format('Y-m-d') }}" value="{{ Carbon\Carbon::parse($shortlink->expires_at)->format('Y-m-d') }}"
@else
value="{{ Carbon\Carbon::now()->format('Y-m-d') }}"
@endif @endif
> >
<label id="time-label" for="expiry-hour">Time</label> <label id="time-label" for="expiry-hour">Time</label>

View File

@ -5,22 +5,36 @@
@endsection @endsection
@section('content') @section('content')
<h1>Profile</h1> <div id="title-container" class="container">
<p>Username: <em>{{ Auth::user()->name }}</em></p> <h1>Profile</h1>
<p>Email: <em>{{ Auth::user()->email }}</em></p> </div>
<p>Created at: <em>{{ Auth::user()->created_at }}</em></p> <div id="profile-container" class="container">
<table> <p>Username: <em>{{ Auth::user()->name }}</em></p>
<tr> <p>Email: <em>{{ Auth::user()->email }}</em></p>
<th>Link</th> <p>Created at: <em>{{ Auth::user()->created_at }}</em></p>
<th>Destination</th> </div>
<th>Created at</th> <div id="table-container" class="container">
</tr> <h2>My Short URLs</h2>
@foreach ($shortlinks as $shortlink) <table>
<tr> <tbody>
<td><a href="{{ url()->to("l/" . $shortlink->shortid) }}">{{ $shortlink['shortid'] }}</a></td> <tr>
<td>{{ $shortlink['destination'] }}</td> <th>Link</th>
<td>{{ Carbon\Carbon::parse($shortlink->created_at)->format('M jS Y') }}</td> <th>Destination</th>
</tr> <th>Created at</th>
@endforeach </tr>
</table> @foreach ($shortlinks as $shortlink)
<tr>
<td><a href="{{ url()->to("l/" . $shortlink->shortid) }}">{{ $shortlink['shortid'] }}</a></td>
<td class="table-truncate"><div class="destination">{{ $shortlink['destination'] }}</div></td>
<td>{{ Carbon\Carbon::parse($shortlink->created_at)->format('M jS Y') }}</td>
</tr>
@endforeach
</tbody>
<tfoot>
<tr>
<td colspan="3"><a href="/home">Shorten a new link</a></td>
</tr>
</tfoot>
</table>
</div>
@endsection @endsection