Initial Commit
This commit is contained in:
29
resources/views/auth/change-password.blade.php
Normal file
29
resources/views/auth/change-password.blade.php
Normal file
@@ -0,0 +1,29 @@
|
||||
@extends('layout.main')
|
||||
|
||||
@section('title', $title)
|
||||
|
||||
@section('content')
|
||||
<form action="{{ Route("auth-password-change.post") }}" method="post">
|
||||
<div class="field">
|
||||
<label for="old_password" class="label">{{ __("views.old_password") }}</label>
|
||||
<div class="control">
|
||||
<input type="password" name="old_password" id="old_password" class="input" placeholder="{{ __("views.old_password") }}" required>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="field">
|
||||
<label for="new_password" class="label">{{ __("views.new_password") }}</label>
|
||||
<div class="control">
|
||||
<input type="password" name="new_password" id="new_password" class="input" placeholder="{{ __("views.new_password") }}" required>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{ csrf_field() }}
|
||||
|
||||
<div class="field">
|
||||
<div class="control">
|
||||
<button class="button is-link">{{ __("views.change_password") }}</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
@endsection
|
||||
35
resources/views/auth/login.blade.php
Normal file
35
resources/views/auth/login.blade.php
Normal file
@@ -0,0 +1,35 @@
|
||||
@extends('layout.main')
|
||||
|
||||
@section('title', $title)
|
||||
|
||||
@section('content')
|
||||
<form action="{{ Route("auth-login.post") }}" method="post">
|
||||
<div class="field">
|
||||
<label for="username" class="label">{{ __("views.username") }}</label>
|
||||
<div class="control">
|
||||
<input type="text" name="username" id="username" class="input" placeholder="{{ __("views.username") }}" value="{{ Request::old('username') }}" required>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="field">
|
||||
<label for="password" class="label">{{ __("views.password") }}</label>
|
||||
<div class="control">
|
||||
<input type="password" name="password" id="password" class="input" placeholder="{{ __("views.password") }}" required>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="field">
|
||||
<label class="checkbox">
|
||||
<input type="checkbox" name="remember"> {{ __("views.remember_me") }}
|
||||
</label>
|
||||
</div>
|
||||
|
||||
{{ csrf_field() }}
|
||||
|
||||
<div class="field">
|
||||
<div class="control">
|
||||
<button class="button is-link">{{ __("views.login") }}</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
@endsection
|
||||
68
resources/views/domain_overview.blade.php
Normal file
68
resources/views/domain_overview.blade.php
Normal file
@@ -0,0 +1,68 @@
|
||||
@extends('layout.main')
|
||||
|
||||
@section('title', $title)
|
||||
|
||||
@section('content')
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<p class="card-header-title">{{ __("views.add_domain") }}</p>
|
||||
</div>
|
||||
<div class="card-content">
|
||||
<form action="{{ Route("domains.add") }}" method="post">
|
||||
<div class="field">
|
||||
<label for="name" class="label">{{ __("views.name") }}</label>
|
||||
<div class="control">
|
||||
<input type="text" name="name" id="name" class="input" placeholder="{{ __('views.name') }}" autofocus required>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{ csrf_field() }}
|
||||
|
||||
<div class="field">
|
||||
<div class="control">
|
||||
<button class="button is-link">{{ __("views.save") }}</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<hr>
|
||||
|
||||
@if($domains->isEmpty())
|
||||
<article class="message is-warning">
|
||||
<div class="message-header">
|
||||
<p>{{ __("views.no_domains_text_header") }}!</p>
|
||||
</div>
|
||||
<div class="message-body">
|
||||
{{ __("views.no_domains_text_body") }}!
|
||||
</div>
|
||||
</article>
|
||||
@else
|
||||
Domains: {{ $domains->count() }}
|
||||
|
||||
<table class="table is-bordered is-striped is-hoverable is-fullwidth">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>{{ __("views.domain") }}</th>
|
||||
<th>{{ __("views.delete") }}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@foreach($domains as $domain)
|
||||
<tr>
|
||||
<td>{{ $domain->name }}</td>
|
||||
<td>
|
||||
<form action="{{ Route("domains.delete") }}" method="post">
|
||||
<input type="hidden" name="domain_name" value="{{ $domain->name }}">
|
||||
<input type="hidden" name="domain_id" value="{{ $domain->id }}">
|
||||
{{ csrf_field() }}
|
||||
<span class="delete-btn" aria-label="{{ __("views.delete_domain") }}" data-microtip-position="top" data-name="{{ $domain->name }}" data-delete="domain" role="tooltip"><i class="fas fa-trash-alt"></i></span>
|
||||
</form>
|
||||
</td>
|
||||
</tr>
|
||||
@endforeach
|
||||
</tbody>
|
||||
</table>
|
||||
@endif
|
||||
@endsection
|
||||
119
resources/views/home.blade.php
Normal file
119
resources/views/home.blade.php
Normal file
@@ -0,0 +1,119 @@
|
||||
@extends('layout.main')
|
||||
|
||||
@section('title', $title)
|
||||
|
||||
@section('content')
|
||||
@if($domains->isEmpty())
|
||||
@else
|
||||
@include('modals.record-edit')
|
||||
|
||||
<div class="select" id="domain-select">
|
||||
<div class="field is-horizontal">
|
||||
<div class="field-label">
|
||||
<label class="label" for="select_domain">{{ __("views.domain") }}</label>
|
||||
</div>
|
||||
<div class="field-body">
|
||||
<select id="select_domain">
|
||||
@foreach($domains as $domain)
|
||||
<option value="{{ $domain->id }}">{{ $domain->name }}</option>
|
||||
@endforeach
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<hr>
|
||||
|
||||
@foreach($domains as $domain)
|
||||
<nav class="panel domain-panel domain-panel-{{ $domain->id }} {{ $loop->first ? 'is-active' : 'is-hidden' }}">
|
||||
<p class="panel-heading">{{ __("views.domain") }}: {{ $domain->name }}</p>
|
||||
<!-- TODO: Check for Domain specific records -->
|
||||
@if($records->isEmpty())
|
||||
<div class="panel-block">
|
||||
<article class="message is-warning">
|
||||
<div class="message-header">
|
||||
<p>{{ __("views.no_data_available_header") }}!</p>
|
||||
</div>
|
||||
<div class="message-body">
|
||||
{{ __("views.no_data_available_body") }}!
|
||||
</div>
|
||||
</article>
|
||||
</div>
|
||||
@elseif(empty($recordCount[$domain->id]))
|
||||
<div class="panel-block">
|
||||
<article class="message is-warning">
|
||||
<div class="message-header">
|
||||
<p>{{ __("views.no_records_available_header") }}!</p>
|
||||
</div>
|
||||
<div class="message-body">
|
||||
{{ __("views.no_records_available_body") }}!<br />
|
||||
<a href="{{ Route('records.add') }}?domain={{ $domain->id }}">{{ __("views.add_record") }}</a>
|
||||
</div>
|
||||
</article>
|
||||
</div>
|
||||
@else
|
||||
<div class="panel-block">
|
||||
<table id="overviewTable-{{ $domain->id }}" class="table is-bordered is-striped is-hoverable is-fullwidth record-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>{{ __("views.name") }}</th>
|
||||
<th>{{ __("views.type") }}</th>
|
||||
<th>{{ __("views.content") }}</th>
|
||||
<th>{{ __("views.ttl") }}</th>
|
||||
<th>{{ __("views.edit") }}</th>
|
||||
<th>{{ __("views.delete") }}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@foreach($records as $record)
|
||||
@if($record->domains_id == $domain->id)
|
||||
<tr>
|
||||
<td>{{ $record->name }}
|
||||
<td>{{ $record->type }}</td>
|
||||
<td>
|
||||
{{ \Illuminate\Support\Str::of($record->content)->limit(70) }}
|
||||
@if($record->type == "SRV")
|
||||
TTL: {{ explode(" ", $record->content)[0] }}
|
||||
Priority: {{ explode(" ", $record->content)[1] }}
|
||||
Port: {{ explode(" ", $record->content)[2] }}
|
||||
Ziel: {{ explode(" ", $record->content)[3] }}
|
||||
@endif
|
||||
</td>
|
||||
<td>{{ $record->ttl }}</td>
|
||||
<td align="center"><span class="edit-btn" data-edit="record" data-url="{{ Route("records.data.json", ["id" => $record->id]) }}"><i class="far fa-edit"></i></span></td>
|
||||
<td align="center">
|
||||
<form action="{{ Route('records.delete') }}" method="post">
|
||||
<input type="hidden" name="type" value="{{ $record->type }}">
|
||||
<input type="hidden" name="name" value="{{ $record->name }}">
|
||||
<input type="hidden" name="domain_name" value="{{ $domain->name }}">
|
||||
<input type="hidden" name="domain_id" value="{{ $domain->id }}">
|
||||
{{ csrf_field() }}
|
||||
<span class="delete-btn" aria-label="{{ __("views.delete_record") }}" data-microtip-position="top" data-name="{{ $record->name }}" data-delete="record" role="tooltip"><i class="fas fa-trash-alt"></i></span>
|
||||
</form>
|
||||
</td>
|
||||
</tr>
|
||||
@endif
|
||||
@endforeach
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
@endif
|
||||
@if(!empty($update[$domain->id]))
|
||||
<div class="panel-block">
|
||||
<p>{{ $update[$domain->id]["text"] }}</p>
|
||||
</div>
|
||||
<div class="panel-block">
|
||||
<a class="button btn-refresh-records is-link" @if($update[$domain->id]["diff"]->i < env('RECORD_FETCH_LIMIT_MINUTES') and $update[$domain->id]["diff"]->h == 0) disabled aria-label="{{ __("views.update_disabled_text", ["minutes" => env('RECORD_FETCH_LIMIT_MINUTES')]) }}!" data-microtip-position="right" role="tooltip" @else href="{{ Route("fetch-records.get", ['domain' => $domain->name, 'id' => $domain->id]) }}" @endif><i class="fas fa-sync"></i> {{ __("views.update_records") }}</a>
|
||||
</div>
|
||||
@else
|
||||
<div class="panel-block">
|
||||
<p>{{ __("views.last_update") }}: {{ __("views.never") }}</p>
|
||||
</div>
|
||||
<div class="panel-block">
|
||||
<a class="button btn-refresh-records is-link" href="{{ Route("fetch-records.get", ['domain' => $domain->name, 'id' => $domain->id]) }}"><i class="fas fa-sync"></i> {{ __("views.update_records") }}</a>
|
||||
</div>
|
||||
@endif
|
||||
</nav>
|
||||
@endforeach
|
||||
@endif
|
||||
@endsection
|
||||
36
resources/views/layout/alerts.blade.php
Normal file
36
resources/views/layout/alerts.blade.php
Normal file
@@ -0,0 +1,36 @@
|
||||
@if(Session::has('Success_Message'))
|
||||
<script>
|
||||
var message = "{{ Session::get('Success_Message') }}";
|
||||
swal({
|
||||
title: "{{ __('views.success') }}",
|
||||
html: message,
|
||||
type: 'success',
|
||||
confirmButtonText: "{{ __('views.close') }}"
|
||||
})
|
||||
</script>
|
||||
@elseif(Session::has('Error_Message'))
|
||||
<script>
|
||||
var message = "{{ Session::get('Error_Message') }}";
|
||||
swal({
|
||||
title: "{{ __('views.error') }}",
|
||||
html: message,
|
||||
type: 'error',
|
||||
confirmButtonText: "{{ __("views.close") }}"
|
||||
})
|
||||
</script>
|
||||
@endif
|
||||
@if(count($errors) > 0)
|
||||
<article class="message is-danger" id="error-container">
|
||||
<div class="message-header">
|
||||
<p>{{ __("views.error") }}</p>
|
||||
<button class="delete" aria-label="delete"></button>
|
||||
</div>
|
||||
<div class="message-body">
|
||||
<ul>
|
||||
@foreach($errors->all() as $error)
|
||||
<li>{{ $error }}</li>
|
||||
@endforeach
|
||||
</ul>
|
||||
</div>
|
||||
</article>
|
||||
@endif
|
||||
45
resources/views/layout/main.blade.php
Normal file
45
resources/views/layout/main.blade.php
Normal file
@@ -0,0 +1,45 @@
|
||||
<!doctype html>
|
||||
<html lang="{{ \App\Http\Controllers\LanguageController::getActiveLanguage() }}">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>{{ env('APP_NAME') }} | @yield('title')</title>
|
||||
|
||||
<script src="https://cdn.jsdelivr.net/sweetalert2/1.3.2/sweetalert2.min.js"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/chart.js@2.9.4/dist/Chart.min.js"></script>
|
||||
|
||||
<link rel="stylesheet" href="/css/app.css">
|
||||
</head>
|
||||
<body class="page-{{ strtolower(str_replace(" ", "_", $title)) }}">
|
||||
<section id="section-navbar">
|
||||
<div class="container">@include('layout.nav')</div>
|
||||
</section>
|
||||
|
||||
<section class="section">
|
||||
<div class="container">
|
||||
@include('layout.alerts')
|
||||
|
||||
<h1 class="title">@yield('title')</h1>
|
||||
@yield('content')
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<script defer src="{{ URL::asset("js/libs/fontawesome-5.14.0.js") }}"></script>
|
||||
<script src="{{ URL::asset("js/libs/moment.min.js") }}"></script>
|
||||
<script src="{{ URL::asset("js/libs/jquery-3.5.1.min.js") }}"></script>
|
||||
<script src="{{ URL::asset("js/libs/jquery.dataTables-1.10.23.min.js") }}"></script>
|
||||
<script src="{{ URL::asset("js/libs/dataTables.bulma-1.10.23.min.js") }}"></script>
|
||||
<script>
|
||||
let swalDeleteRecordTitle = "{{ __("views.delete_record") }}";
|
||||
let swalDeleteDomainTitle = "{{ __("views.delete_domain") }}"
|
||||
let swalDeleteRecordText1 = "{{ __("views.swal_delete_record_sure_1") }}";
|
||||
let swalDeleteRecordText2 = "{{ __("views.swal_delete_record_sure_2") }}";
|
||||
let swalDeleteRecordYes = "{{ __("views.swal_delete_record_yes") }}";
|
||||
let swalDeleteDomainText1 = "{{ __("views.swal_delete_domain_sure_1") }}";
|
||||
let swalDeleteDomainText2 = "{{ __("views.swal_delete_domain_sure_2") }}";
|
||||
let swalDeleteDomainYes = "{{ __("views.swal_delete_domain_yes") }}";
|
||||
let cancel = "{{ __("views.cancel") }}";
|
||||
</script>
|
||||
<script src="{{ URL::asset("js/main.js") }}"></script>
|
||||
</body>
|
||||
</html>
|
||||
46
resources/views/layout/nav.blade.php
Normal file
46
resources/views/layout/nav.blade.php
Normal file
@@ -0,0 +1,46 @@
|
||||
<nav class="navbar is-link is-fixed-top" role="navigation" aria-label="main navigation">
|
||||
<a role="button" id="mainBurger" class="navbar-burger" aria-label="menu" aria-expanded="false" data-target="mainNavbar">
|
||||
<span aria-hidden="true"></span>
|
||||
<span aria-hidden="true"></span>
|
||||
<span aria-hidden="true"></span>
|
||||
</a>
|
||||
|
||||
<div id="mainNavbar" class="navbar-menu">
|
||||
@if(Auth::check())
|
||||
<div class="navbar-start">
|
||||
<a href="/" class="navbar-item">Home</a>
|
||||
<a href="{{ Route('records.add') }}" class="navbar-item"><i class="far fa-plus-square"></i> {{ __("views.add_record") }}</a>
|
||||
<a href="{{ Route('domains.get') }}" class="navbar-item"><i class="fas fa-globe"></i> {{ __("views.domains") }}</a>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
<div class="navbar-end">
|
||||
<div class="navbar-item has-dropdown is-hoverable">
|
||||
<a class="navbar-link">
|
||||
{{ __("views.language") }}
|
||||
</a>
|
||||
|
||||
<div class="navbar-dropdown">
|
||||
<a href="{{ Route("language.set", ["code" => "de"]) }}" class="navbar-item {{ \App\Http\Controllers\LanguageController::getActiveLanguage() == 'de' ? 'lang-active' : '' }}"><span class="flag flag-xs" lang="de"></span> {{ __("views.german") }}</a>
|
||||
<a href="{{ Route("language.set", ["code" => "en"]) }}" class="navbar-item {{ \App\Http\Controllers\LanguageController::getActiveLanguage() == 'en' ? 'lang-active' : '' }}"><span class="flag flag-xs" lang="en"></span> {{ __("views.english")}}</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@if(Auth::check())
|
||||
<div class="navbar-item has-dropdown is-hoverable">
|
||||
<a class="navbar-link">
|
||||
<i class="fas fa-user"></i> {{ Auth::user()->username }}
|
||||
</a>
|
||||
|
||||
<div class="navbar-dropdown is-right">
|
||||
<a href="{{ Route("auth-password-change.get") }}" class="navbar-item"><i class="fas fa-key"></i> {{ __("views.change_password") }}</a>
|
||||
<hr class="navbar-divider">
|
||||
<a href="{{ Route("auth-logout.get") }}" class="navbar-item"><i class="fas fa-sign-out-alt"></i> {{ __("views.logout") }}</a>
|
||||
</div>
|
||||
</div>
|
||||
@else
|
||||
<a href="{{ Route('auth-login.get') }}" class="navbar-item">Login</a>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
50
resources/views/modals/record-edit.blade.php
Normal file
50
resources/views/modals/record-edit.blade.php
Normal file
@@ -0,0 +1,50 @@
|
||||
<div class="modal" id="recordEditModal">
|
||||
<div class="modal-background"></div>
|
||||
<div class="modal-card">
|
||||
<header class="modal-card-head">
|
||||
<p class="modal-card-title">{{ __("views.edit_record") }}</p>
|
||||
<button class="delete modal-closer" aria-label="close"></button>
|
||||
</header>
|
||||
<section class="modal-card-body">
|
||||
<form action="{{ Route("records.edit") }}" method="post">
|
||||
<input type="hidden" name="record_id" id="edit_record_id">
|
||||
|
||||
<div class="field">
|
||||
<label for="edit_name">{{ __("views.name") }}</label>
|
||||
<div class="control">
|
||||
<input type="text" name="name" id="edit_name" class="input" disabled>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="field">
|
||||
<label for="edit_type">{{ __("views.type") }}</label>
|
||||
<div class="control">
|
||||
<input type="text" name="type" id="edit_type" class="input" disabled>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="field">
|
||||
<label for="edit_content">{{ __("views.content") }}</label>
|
||||
<div class="control">
|
||||
<input type="text" name="content" id="edit_content" class="input">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="field">
|
||||
<label for="edit_ttl">{{ __("views.ttl") }}</label>
|
||||
<div class="control">
|
||||
<input type="number" name="ttl" id="edit_ttl" class="input">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{ csrf_field() }}
|
||||
|
||||
<div class="field">
|
||||
<div class="control">
|
||||
<button class="button is-link">{{ __("views.save") }}</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</section>
|
||||
</div>
|
||||
</div>
|
||||
66
resources/views/record_add.blade.php
Normal file
66
resources/views/record_add.blade.php
Normal file
@@ -0,0 +1,66 @@
|
||||
@extends('layout.main')
|
||||
|
||||
@section('title', $title)
|
||||
|
||||
@section('content')
|
||||
<form action="{{ Route("records.add") }}" method="post">
|
||||
<div class="field">
|
||||
<label for="domain" class="label">{{ __("views.domain") }}</label>
|
||||
<div class="control">
|
||||
<div class="select">
|
||||
<select name="domain" id="domain">
|
||||
@foreach($domains as $domain)
|
||||
<option value="{{ $domain->id }}">{{ $domain->name }}</option>
|
||||
@endforeach
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="field">
|
||||
<label for="type" class="label">{{ __("views.type") }}</label>
|
||||
<div class="control">
|
||||
<div class="select">
|
||||
<select name="type" id="type">
|
||||
<option value="a">A</option>
|
||||
<option value="aaaa">AAAA</option>
|
||||
<option value="cname">CNAME</option>
|
||||
<option value="mx">MX</option>
|
||||
<option value="txt">TXT</option>
|
||||
<option value="tlsa">TLSA</option>
|
||||
<option value="caa">CAA</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="field">
|
||||
<label for="name" class="label">{{ __("views.name") }}</label>
|
||||
<div class="control">
|
||||
<input type="text" name="name" id="name" class="input" placeholder="{{ __('views.name') }}">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="field">
|
||||
<label for="content" class="label">{{ __("views.content") }}</label>
|
||||
<div class="control">
|
||||
<input type="text" name="content" id="content" class="input" placeholder="{{ __('views.content') }}" required>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="field">
|
||||
<label for="ttl" class="label">{{ __("views.ttl") }}</label>
|
||||
<div class="control">
|
||||
<input type="number" value="20" name="ttl" id="ttl" class="input" placeholder="{{ __('views.ttl') }}" required>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{ csrf_field() }}
|
||||
|
||||
<div class="field">
|
||||
<div class="control">
|
||||
<button class="button is-link">{{ __("views.save") }}</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
@endsection
|
||||
Reference in New Issue
Block a user