Initial Web UI inspired by int10h.org

This commit is contained in:
Deon George 2021-06-13 01:14:34 +10:00
parent b94e39c7af
commit d7f3ab4130
15 changed files with 593 additions and 213 deletions

View File

@ -4,18 +4,10 @@ namespace App\Http\Controllers;
class HomeController extends Controller
{
public function home() {
return view('home');
}
public function network(string $name)
{
return view('networks')
->with('content',$name)
->with('network',$name);
}
public function welcome() {
return view('welcome');
}
}

73
public/css/fixes.css vendored
View File

@ -1,73 +0,0 @@
body {
font-size: 20px;
background-color: #000000;
line-height: 16px;
}
.bg-blue {
background-color: #000084;
color: #fff;
border: 1px solid #fff !important;
margin-top: 14px !important;
padding-top: 14px !important;
padding-bottom: 14px !important;
margin-bottom: 14px !important;
margin-left: 3.5px;
padding-left: 10.5px;
padding-right: 11.5px;
margin-right: 2.5px;
width: calc(100% - 6px);
}
/* Fix button forms */
form button.btn {
font-size: 20px !important;
line-height: 14px !important;
}
/* Fix form input box */
input.form-control {
font-size: 20px !important;
line-height: 20px !important;
height: 20px;
background: none;
background-color: #DDDDDD;
color: #000000;
padding: 0 8px;
}
input.form-control:focus {
background-color: #FFFFFF;
color: #000000;
}
/* Fix nested dropdowns */
.dropdown-submenu:hover>.dropdown-menu {
display: block;
}
.dropdown-submenu>.dropdown-toggle:active {
pointer-events: none;
}
.dropdown-menu {
line-height: 16px;
}
.dropdown-submenu {
position:relative;
line-height: 16px;
}
.dropdown-submenu>.dropdown-menu {
top: 0;
left: 97%;
margin-top: 0;
padding: 5px;
}
/* rotate caret on hover */
.dropdown-menu > li > a::after {
transform: rotate(-90deg);
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.9 KiB

After

Width:  |  Height:  |  Size: 549 B

415
public/oldschool/css/main.css vendored Normal file
View File

@ -0,0 +1,415 @@
@font-face {
/* font-family: 'IBM BIOS-2y'; */
font-family: ibmbios2y;
src: url(../font/Web437_IBM_BIOS-2y.woff) format('woff');
font-weight: normal;
font-style: normal;
}
html {
height:100%;
box-sizing:border-box
}
*,
*:before,
*:after {
box-sizing:inherit
}
::-moz-selection {
background-color:#0a0;
color:#000
}
::selection {
background-color:rgba(0,172,0,.99);
color:#000
}
img::-moz-selection {
background-color:#0a0
}
img::selection {
background-color:rgba(0,172,0,.5)
}
a,
a:before,
a:after,
input,
select,
textarea {
transition:color .15s,background-color .15s,border-color .15s,opacity .15s
}
a:link {
text-decoration:none
}
:not(dt)>a:link,
:not(dt)>a:visited {
color:#0aa
}
div p:last-child {
margin-bottom:0
}
body {
background-color: #000;
color: #aaa;
overflow-x: hidden;
overflow-y: scroll;
margin: 0;
line-height: 20px
}
body {
font-family:ibmbios2y,monospace;
font-size:16px
}
body {
position:relative;
padding-bottom:68px;
min-height:100%
}
sup {
color: #530000;
}
sup:before {
content: '[';
}
sup:after {
content: ']';
}
sup:before,
sup:after {
color: #aa0000;
}
#nav {
width: 100%;
position: fixed;
background: #2e2e2e;
height: 3em;
z-index: 4;
box-sizing: content-box
}
#nav-menu {
color:#aaa;
padding:0;
width:inherit;
max-width:1248px;
position:fixed;
z-index:4;
top:0;
left:0;
right:0;
margin-top:0;
margin-bottom:0;
margin-left:auto;
margin-right:auto;
text-align:left;
}
#nav-menu h1 {
width: 216px;
font-size: 1.5em;
font-weight:400;
padding: 0;
color: #fff;
display: inline-block;
text-transform:uppercase;
margin-right: 10px;
margin-left: -50px;
}
#nav-menu ul {
margin:0;
padding:0;
display:inline-block;
text-transform:uppercase;
}
#nav-menu ul li {
display:inline-block;
list-style-type:none;
margin:0;
padding:0
}
#nav-menu ul li a,
#nav-menu ul li a:link,
#nav-menu ul li a:visited {
display:inline-block;
text-decoration:none;
color:#ff5;
padding:0 11px;
margin:7px;
border-top:1px solid #fff;
border-bottom:1px solid #fff;
border-right:2px solid #fff;
border-left:2px solid #fff;
}
#nav-menu ul:after {
padding:8px 0 7px 2px;
display:inline-block;
}
#nav-menu ul li a span {
display:inline-block;
padding:8px 0 7px
}
#nav-menu ul li a:active,
#nav-menu ul li a:hover,
#nav-menu ul li a:focus {
color:#fff;
background-color:#a00;
outline:0
}
#nav-menu ul li a span:before {
content:"["
}
#nav-menu ul li a span:after {
content:"]"
}
#nav-menu ul li a span:before,
#nav-menu ul li a span:after {
color:#c60
}
#nav-menu ul li a:active span:before,
#nav-menu ul li a:hover span:before,
#nav-menu ul li a:active span:after,
#nav-menu ul li a:hover span:after,
#nav-menu ul li a:focus span:before,
#nav-menu ul li a:focus span:after {
color:#aaa
}
a.thispage,
a.thispage:hover {
border-color:#aaa!important;
background-color:transparent!important
}
a.thispage span,
a.thispage:hover span {
color:#c60!important
}
a.thispage span:before,
a.thispage span:after {
color:#a00!important
}
ul#navlist-desktop {
position: absolute;
}
#sidebar {
position:absolute;
left:0;
top:calc(3em + 8px);
height:calc(100vh - 3em + 8px);
width:22ch;
overflow:hidden;
padding-top:.5em;
color:#c60;
background-color:#000;
box-sizing:border-box;
transition:left .1s ease-out
}
#sidebar.x {
width:25ch
}
#sidebar-scroller {
overflow-y:scroll;
padding-right:0;
box-sizing:content-box;
width:100%;
text-align:left;
height:calc(100vh - 3em + 8px)
}
#sidebar dl:last-child {
margin-bottom:2em
}
#sidebar ::-webkit-scrollbar {
display:none
}
#content {
color:#aaa;
max-width:993px;
margin:0 auto;
padding:4em 0 0;
box-sizing:border-box;
overflow:hidden
}
#content * {
vertical-align:top
}
#content a.anchor {
display:block;
position:relative;
top:-4em;
visibility:hidden
}
.with-sidebar {
position:relative;
left:88px;
max-width:1041px!important
}
.with-sidebar.x {
left:112px;
max-width:1017px!important
}
/* MAIN CONTENT HEADERS */
#content h1 {
color: #fff;
font-weight: 400;
margin-top: 5px;
margin-bottom: 10px;
padding-bottom: 10px;
text-shadow: 2px 2px 0 #555;
border-bottom: 2px solid #aaa;
}
#content h2 {
color:#fff;
background-color:#a00;
display:inline-block;
font-size:100%;
font-weight:400;
text-align:center;
padding:9px 8px 7px;
margin:24px auto 40px auto;
box-shadow:8px 9px 0 0 #333
}
#content>h2:first-child {
margin-top:8px
}
#content h3,
#content h4 {
font-size:100%;
font-weight:400;
text-align:left
}
#content h3 {
padding:0 0 7px;
margin:0 0 24px -.3px;
color:#c60;
border-bottom:1px solid #b00
}
#content h4 {
box-sizing:border-box;
margin:0 0 1em -.3px;
color:#b00;
display:inline-block;
padding-right:1ch
}
#content h5 {
color:#c60;
}
#content ul {
margin:0 1ch;
padding-left:1ch;
list-style-type:none
}
#content ul ul {
margin:0;
padding-left:0;
list-style-type:none
}
#content ul.ind {
margin-right:2ch
}
#content ul li {
margin:0 1ch;
text-indent:-3ch;
padding-left:3ch;
display:block
}
#content ul li:before {
content:"\2666\a0\A0";
color:#0a0
}
#content ul ul li::before {
content:"\25CB\A0\A0"!important
}
#content ul li:last-child {
margin-bottom: 16px;
}
dl {
margin:1em -1px 0 1px
}
dt a {
color:#5ff
}
dt a:hover,
dt a:active {
color:#fff;
background-color:#0aa
}
dd {
margin-left:0;
text-align:left
}
dd a::before {
content:"\BB\a0";
color:#a00;
background-color:#000
}
dd a:hover:before,
dd a:active:before {
content:"\25BA\A0";
color:#c60
}
dd a:hover,
dd a:active {
color:#fff!important;
background-color:#0aa
}
p {
margin:0 0 1em;
padding:0;
text-align:left;
word-break:break-word
}
ul {
text-align:left
}
#footer {
position:absolute;
bottom:0;
left:0;
right:0;
text-align:center;
height:48px;
width:100%
}
a#getback,
a#getback:link,
a#getback:visited {
display:inline-block;
text-decoration:none;
color:#0a0;
padding:.5em 1ch;
margin:0 3ch 0 0
}
a#getback:active,
a#getback:hover {
color:#5f5;
background-color:#333
}
a#getback:focus {
color:#5ff;
background-color:#333;
outline:0
}
a#getback:before {
color:#a00;
content:"\25C4\25C4\a0"
}
a#getback:active:before,
a#getback:hover:before {
color:#f55
}
a#getback:focus:before {
color:#fff
}

Binary file not shown.

View File

@ -0,0 +1,60 @@
@extends('layouts.app')
@section('main-content')
<h2>About the FTN Clearing House</h2>
<p>Welcome to the FTN Clearing House.</p>
<p>The FTN Clearing House (FCH) is both a FTN Mailer and FTN message tosser, where mail is stored internally in a DB. FCH can also hatch and toss files into FTN networks for both up/downstream nodes.</p>
<p>It was created as an idea to bring modern technology and capabilities to a legacy computing network that existed in the 1970's, 1980's and 1990's (before the Internet basically).</p>
<p>Setting up a BBS is fun, but using a BBS for the long term, in amongst our busy lives can involve some repetitive tasks.
In the same vain, maintaining and growing an FTN network also can be time consuming, especially when your effort (or lack thereof) can affect the experience of your users.
So FCH was created to help address that.
</p>
<p>Building this software is driven by two main goals:</p>
<ul>
<li>Self Service - so that users can setup and re-jig their configuration themselves, or new users can join a network with the minimum of effort.</li>
<li>Automation - so that repetitive tasks can be done with minimal effort</li>
</ul>
<p>So that you can send your time playing on your BBS rather than managing messages/fails or keeping an FTN network running.</p>
<h3>For the BBS Sysop</h3>
<p>For the BBS sysop, the FTN Clearing House has the following features (or planned ones):</p>
<ul>
<li>Supports BINKP network transfers</li>
<li>Supports EMSI network transfers</li>
<li>Supports PING responses <sup>To be implemented</sup></li>
<li>Proxy mode, if you want your BBS to have our main address <sup>To be implemented</sup></li>
<li>A consistent reliable echomail/netmail hub for your BBSes.<br>
If you have more than 1 BBS, then the Clearing House can receive all your mail from your uplinks and feed them to your BBSes.
</li>
</ul>
<h3>For the FTN network operator</h3>
<p>For the FTN network operator, the FTN Clearing House has the following features (or planned ones):</p>
<ul>
<li>Supports BINKP network transfers</li>
<li>Supports EMSI network transfers</li>
<li>Supports PING and TRACE responses <sup>To be implemented</sup></li>
<li>Nodelist Management <sup>To be implemented</sup></li>
<li>Network Applications <sup>To be implemented</sup></li>
<li>Dynamic mail bundling for upstream and downstream nodes <sup>To be implemented</sup></li>
<li>Automatic delisting of idle nodes <sup>To be implemented</sup></li>
</ul>
<h5>Other things</h5>
<p>Other ideas that may make it into this tool:</p>
<ul>
<li>SMTP integration</li>
<li>PGP signed mail and mail verification</li>
<li>SQRL simple authentication <small>(so there is 1 less username/password you need to remember)</small></li>
</ul>
<p>To get started, please <a href="{{ url('login') }}">login</a>.</p>
<h4>Open Source</h4>
<p>FTN Clearing House is build with Open Source software. At it's core, PHP drives this web UI and the interaction with nodes.</p>
<p>This web UI has been inspired by the great work at <a href="https://int10h.org">int10h.org</a>. If you have ideas to make it even better, please send me a message, or submit your comments in <a href="https://dev.leenooks.net/bbs/clrghouz">gitlab</a></p>
@endsection

View File

@ -1,34 +1,28 @@
<!DOCTYPE html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html lang="en">
@section('htmlheader')
@include('layouts.partials.htmlheader')
@show
<body>
<div id="app">
@include('layouts.partials.mainheader')
<!-- Content Wrapper. Contains page content -->
<div class="content">
@include('layouts.partials.contentheader')
<!-- Main content -->
<section class="content">
<div id="content">
<!-- Your Page Content Here -->
@yield('main-content')
</div>
</section><!-- /.content -->
</div><!-- /.content-wrapper -->
@include('layouts.partials.footer')
{{-- Scripts --}}
@section('scripts')
@include('layouts.partials.scripts')
@yield('page-scripts')
@show
<div id="nav" style="padding-bottom: 5px;">
@include('layouts.partials.topmenu')
</div>
<div id="content" class="with-sidebar">
<a class="anchor" id="top"></a>
@yield('main-content')
</div>
<div id="footer" class="shifted">
@include('layouts.partials.footer')
</div>
{{-- Scripts --}}
@section('scripts')
@include('layouts.partials.scripts')
@yield('page-scripts')
@show
</body>
</html>

View File

@ -1,3 +1 @@
<div id="footer">
<a href="/" id="getback">{{ request()->getHost() }}</a> © {{ \Carbon\Carbon::now()->year }} Alterego
</div>
<a href="/" id="getback">{{ request()->getHost() }}</a> &copy {{ \Carbon\Carbon::now()->year }} Alterego

View File

@ -3,12 +3,9 @@
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="description" content="{{ $decription ?? '' }}">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="{{ asset('bootstra.386/css/bootstrap.min.css') }}">
<link href="{{ asset('oldschool/css/main.css') }}" rel="stylesheet" media="screen" type="text/css">
@if (file_exists('css/fixes.css'))
<link rel="stylesheet" href="{{ asset('css/fixes.css') }}">
@endif
<link rel="icon" type="image/png" href="{{ asset('/favicon.ico') }}">
<link rel="icon" type="image/png" href="{{ asset('favicon.ico') }}">
</head>

View File

@ -1,12 +0,0 @@
<nav class="navbar main-header navbar-nav navbar-expand bg-ansi-blue">
<h1 class="navbar-brand fg-ansi-white mt-2">{{ $title ?? config('app.name') }}</h1>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse pt-3" id="navbarSupportedContent">
<!-- Add icons to the links using the .nav-icon class with font-awesome or any other icon font library -->
@include('layouts.partials.topmenu')
</div>
</nav>

View File

@ -1,2 +0,0 @@
<script type="text/javascript" src="{{ asset('//cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js') }}" integrity="sha512-894YE6QWD5I59HgZOGReFYm4dnWc1Qt5NtvYSaNcOP+u1T9qYdvdihz0PPSiiqn/+/3e7Jo4EaG7TubfWGUrMQ==" crossorigin="anonymous"></script>
<script type="text/javascript" src="{{ asset('/bootstra.386/js/bootstrap.bundle.min.js') }}"></script>

View File

@ -1,53 +1,98 @@
<ul class="navbar-nav mr-auto">
<li class="nav-item active">
<a class="nav-link" href="{{ url('/') }}">Home</a>
</li>
<div id="nav-menu">
<h1>{{ $title ?? config('app.name') }}</h1>
@auth
<li class="nav-item dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="false" aria-expanded="false"> <span class="nav-label">System </span></a>
<ul class="dropdown-menu">
<li class="nav-item"><a class="dropdown-item disabled" href="{{ url('setup') }}">Setup</a></li>
<li class="dropdown-submenu">
<a class="nav-item dropdown-item dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-haspopup="false" aria-expanded="false"><span class="nav-label">Services </span></a>
<ul class="dropdown-menu">
<li class="nav-item"><a class="dropdown-item disabled" href="{{ url('setup/binkp') }}">BinkP</a></li>
<li class="nav-item"><a class="dropdown-item disabled" href="{{ url('setup/emsi') }}">EMSI</a></li>
</ul>
</li>
<li class="nav-item"><a class="dropdown-item disabled" href="{{ url('users') }}">Users</a></li>
</ul>
</li>
<ul id="navlist-desktop">
<li><a href="{{ url('/') }}" class="@if(preg_match('#^/#',request()->path()))thispage @endif"><span>Home</span></a></li>
<li><a href="{{ url('about') }}" class="@if(preg_match('#^about#',request()->path()))thispage @endif"><span>About</span></a></li>
<li><a href="{{ url('help') }}" class="@if(preg_match('#^help#',request()->path()))thispage @endif"><span>Help</span></a></li>
@can('admin')
<li><a href="{{ url('setup') }}" class="@if(preg_match('#^setup#',request()->path()))thispage @endif"><span>Setup</span></a></li>
@endcan
@if(preg_match('#^/network/#',request()->path()))
<li><a href="{{ url('join') }}" class="@if(preg_match('#^join#',request()->path()))thispage @endif"><span>Join</span></a></li>
@endif
</ul>
<li class="nav-item dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="false" aria-expanded="false"> <span class="nav-label">FTN </span></a>
<ul class="dropdown-menu">
<li class="nav-item"><a class="dropdown-item" href="{{ url('ftn/domain') }}">Domains</a></li>
<li class="nav-item"><a class="dropdown-item" href="{{ url('ftn/zone') }}">Zones</a></li>
<li class="nav-item"><a class="dropdown-item" href="{{ url('ftn/node') }}">Nodes</a></li>
</ul>
</li>
@endauth
<ul style="float: right;">
@auth
<li><a href="{{ url('logout') }}"><span>Logout</span></a></li>
@endauth
@guest
<li><a href="{{ url('login') }}"><span>Login</span></a></li>
@endguest
</ul>
@guest
<li class="nav-item dropdown">
<a class="nav-link" href="#" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Networks</a>
<div class="dropdown-menu" aria-labelledby="navbarDropdown">
@foreach (\App\Models\Zone::active()->public()->get() as $o)
<a class="dropdown-item" href="{{ url('network',['id'=>$o->name]) }}" title="{{ $o->description }}">{{ $o->name }}</a>
@endforeach
{{--
<div id="fontwidget">
<span id="row1">
Text mode font:
</span>
<span id="row2">
<a id="togglefonts" class="on" href="#-" onclick="toggleFonts();">[]</a>
<a id="selectfont1" class="on" href="#-" onclick="switchFont(1);">1</a>
<a id="selectfont2" href="#-" onclick="switchFont(2);" class="on">2</a>
<a id="selectfont3" href="#-" onclick="switchFont(3);" class="on">3</a>
<a id="selectfont4" href="#-" onclick="switchFont(4);" class="on">4</a>
<a id="selectfont5" href="#-" onclick="switchFont(5);" class="on">5</a>
<a id="selectfont6" href="#-" onclick="switchFont(6);" class="on">6</a>
</span>
<span id="currentfont">
IBM VGA 8x16
</span>
</div>
--}}
{{--
@todo Get rid of the CSS values if they arenot used, then delete this
<noscript>
<div id="fontwidget-no-js">
<div class="grn">Enable JavaScript for full functionality of all site features.</div>
</div>
</li>
@endguest
</ul>
</noscript>
--}}
<ul class="navbar-nav float-right">
<li class="nav-item">
@auth
<a class="nav-link" href="{{ url('logout') }}">Logout</a>
@endauth
@guest
<a class="nav-link" href="{{ url('login') }}">Login</a>
@endguest
</li>
</ul>
{{--
@todo Is this required?
<div id="mobile-nav-content">
<ul>
<li>Oldschool PC Fonts:</li>
<li class="nobullet"><a href="../"><span>Home</span></a></li>
<li><a class="thispage"><span>Fonts</span></a></li>
<li><a href="../readme/"><span>Readme</span></a></li>
<li><a href="../showcase/"><span>Showcase</span></a></li>
<li><a href="../download/"><span>Download</span></a></li>
</ul>
<div class="mobile-button" id="mobile-button-burger" onclick="toggleSidebar();"> </div>
<div class="mobile-button" id="mobile-button-fontwidget" onclick="toggleFontWidget();">Aa</div>
</div>
--}}
<div id="sidebar">
<div id="sidebar-scroller">
@auth
Jump to section:
<dl>
<dt><a href="#" >FTN Networks</a></dt>
<dd><a href="{{ url('ftn/domain') }}">Domains</a></dd>
<dd><a href="{{ url('ftn/zones') }}" >Zones</a></dd>
<dd><a href="{{ url('ftn/nodes') }}" >Nodes</a></dd>
</dl>
<dl>
<dt><a href="#" >Users</a></dt>
<dd><a href="{{ url('user/add') }}" >Create</a></dd>
<dd><a href="{{ url('user/list') }}">List</a></dd>
</dl>
@endauth
@guest
Explore:
<dl>
<dt><a href="#" >FTN Networks</a></dt>
@foreach (\App\Models\Zone::active()->public()->get() as $o)
<dd><a href="{{ url('network',['id'=>$o->name]) }}" title="{{ $o->description }}">{{ $o->name }}</a></dd>
@endforeach
</dl>
@endguest
</div>
</div>
</div>

View File

@ -1,34 +0,0 @@
@extends('layouts.app')
@section('main-content')
<div class="nopadme pb-3">
<h2 class="fg-ansi-white">About the FTN Clearing House</h2>
<p>Welcome to the FTN Clearing House.</p>
<p>The FTN Clearing House (FCH) is both a FTN Mailer and FTN message tosser, where mail is stored internally in a DB. FCH can also hatch and toss files into FTN networks for up/downstream nodes.</p>
<p>It was created as an idea to bring modern technology and capabilities to a legacy computing network that existed in the 1970's, 1980's and 1990's (before the Internet basically).</p>
<h3>For the BBS Sysop</h3>
<p class="pw">For the BBS sysop, the FTN Clearing House has the following features:</p>
<ul class="pw">
<li>Supports BINKP network transfers</li>
<li>Supports EMSI network transfers</li>
<li>Supports PING responses <sup>*</sup></li>
<li>Proxy mode, if you want your BBS to have our main address <sup>*</sup></li>
<li>A consistent reliable echomail/netmail hub for your BBSes.<br>
If you have more than 1 BBS, then the Clearing House can receive all your mail from your uplinks and feed them to your BBSes.
</li>
</ul>
<h3>For the FTN network operator</h3>
<p class="pw">For the FTN network operator, the FTN Clearing House has the following features:</p>
<ul class="pw">
<li>Supports BINKP network transfers</li>
<li>Supports EMSI network transfers</li>
<li>Supports PING and TRACE responses <sup>*</sup></li>
<li>Nodelist Management <sup>*</sup></li>
<li>Network Applications <sup>*</sup></li>
<li>Dynamic mail bundling for downstream nodes <sup>*</sup></li>
<li>Automatic delisting of idle nodes <sup>*</sup></li>
</ul>
</div>
@endsection

View File

@ -27,8 +27,8 @@ Auth::routes([
]);
Route::get('logout',[LoginController::class,'logout']);
Route::get('/',[HomeController::class,'welcome']);
Route::get('home',[HomeController::class,'home']);
Route::redirect('/','about');
Route::view('about','about');
Route::get('ftn/domain',[DomainController::class,'home']);
Route::match(['get','post'],'ftn/domain/addedit/{o?}',[DomainController::class,'add_edit'])