2015-12-13 09:34:12 +00:00
|
|
|
<!DOCTYPE html>
|
|
|
|
<html>
|
2016-04-22 00:37:33 +00:00
|
|
|
<head>
|
|
|
|
{% block head %}
|
|
|
|
<meta charset="utf-8">
|
|
|
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
|
|
|
{% block title %}<title>DNS Control Panel</title>{% endblock %}
|
|
|
|
<!-- Get Google Fonts we like -->
|
|
|
|
<link href="//fonts.googleapis.com/css?family=Open+Sans:400,300,600,700&subset=all" rel="stylesheet" type="text/css"/>
|
|
|
|
<link href='//fonts.googleapis.com/css?family=Roboto+Mono:400,300,700' rel='stylesheet' type='text/css'>
|
|
|
|
<!-- Tell the browser to be responsive to screen width -->
|
|
|
|
<meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport">
|
|
|
|
<!-- Bootstrap 3.3.6 -->
|
|
|
|
<link rel="stylesheet" href="{{ url_for('static', filename='adminlte2/bootstrap/css/bootstrap.min.css') }}">
|
|
|
|
<!-- Font Awesome -->
|
|
|
|
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.5.0/css/font-awesome.min.css">
|
|
|
|
<!-- Ionicons -->
|
|
|
|
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/ionicons/2.0.1/css/ionicons.min.css">
|
2016-04-22 07:06:01 +00:00
|
|
|
<!-- DataTables -->
|
|
|
|
<link rel="stylesheet" href="{{ url_for('static', filename='adminlte2/plugins/datatables/dataTables.bootstrap.css') }}">
|
2016-04-22 00:37:33 +00:00
|
|
|
<!-- Theme style -->
|
|
|
|
<link rel="stylesheet" href="{{ url_for('static', filename='adminlte2/dist/css/AdminLTE.min.css') }}">
|
|
|
|
<!-- AdminLTE Skins. Choose a skin from the css/skins
|
|
|
|
folder instead of downloading all of them to reduce the load. -->
|
|
|
|
<link rel="stylesheet" href="{{ url_for('static', filename='adminlte2/dist/css/skins/_all-skins.min.css') }}">
|
|
|
|
<!-- iCheck -->
|
2016-04-23 01:45:34 +00:00
|
|
|
<link rel="stylesheet" href="{{ url_for('static', filename='adminlte2/plugins/iCheck/all.css') }}">
|
2016-04-24 19:42:13 +00:00
|
|
|
<!-- multiselect -->
|
|
|
|
<link rel="stylesheet" href="{{ url_for('static', filename='multiselect/css/multi-select.css') }}">
|
2016-04-22 00:37:33 +00:00
|
|
|
<!-- custom CSS -->
|
|
|
|
<link rel="stylesheet" href="{{ url_for('static', filename='custom/css/custom.css') }}">
|
2015-12-13 09:34:12 +00:00
|
|
|
|
2016-04-22 00:37:33 +00:00
|
|
|
<!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
|
|
|
|
<!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
|
|
|
|
<!--[if lt IE 9]>
|
|
|
|
<script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
|
|
|
|
<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
|
|
|
|
<![endif]-->
|
|
|
|
{% endblock %}
|
|
|
|
</head>
|
2016-04-29 21:36:37 +00:00
|
|
|
<body class="hold-transition skin-blue sidebar-mini {% if not fullscreen_layout_setting %}layout-boxed{% endif %}">
|
2016-04-22 00:37:33 +00:00
|
|
|
<div class="wrapper">
|
|
|
|
{% block pageheader %}
|
|
|
|
<header class="main-header">
|
|
|
|
<!-- Logo -->
|
|
|
|
<a href="{{ url_for('index') }}" class="logo">
|
|
|
|
<!-- mini logo for sidebar mini 50x50 pixels -->
|
|
|
|
<span class="logo-mini"><b>PD</b>A</span>
|
|
|
|
<!-- logo for regular state and mobile devices -->
|
|
|
|
<span class="logo-lg"><b>PowerDNS</b>-Admin</span>
|
|
|
|
</a>
|
|
|
|
<!-- Header Navbar: style can be found in header.less -->
|
|
|
|
<nav class="navbar navbar-static-top">
|
|
|
|
<!-- Sidebar toggle button-->
|
|
|
|
<a href="#" class="sidebar-toggle" data-toggle="offcanvas" role="button">
|
|
|
|
<span class="sr-only">Toggle navigation</span>
|
|
|
|
</a>
|
|
|
|
|
|
|
|
<div class="navbar-custom-menu">
|
|
|
|
<ul class="nav navbar-nav">
|
|
|
|
<!-- User Account: style can be found in dropdown.less -->
|
|
|
|
<li class="dropdown user user-menu">
|
|
|
|
<a href="#" class="dropdown-toggle" data-toggle="dropdown">
|
|
|
|
{% if current_user.avatar %}
|
|
|
|
<img src="{{ url_for('user_avatar', filename=current_user.avatar) }}" class="user-image" alt="User Image"/>
|
|
|
|
{% else %}
|
|
|
|
<img src="{{ url_for('static', filename='adminlte2/dist/img/avatar.png') }}" class="user-image" alt="User Image"/>
|
|
|
|
{% endif %}
|
|
|
|
<span class="hidden-xs">
|
|
|
|
{{ current_user.firstname }}
|
|
|
|
</span>
|
2015-12-13 09:34:12 +00:00
|
|
|
</a>
|
2016-04-22 00:37:33 +00:00
|
|
|
<ul class="dropdown-menu">
|
|
|
|
<!-- User image -->
|
|
|
|
<li class="user-header">
|
|
|
|
{% if current_user.avatar %}
|
|
|
|
<img src="{{ url_for('user_avatar', filename=current_user.avatar) }}" class="img-circle" alt="User Image"/>
|
|
|
|
{% else %}
|
|
|
|
<img src="{{ url_for('static', filename='adminlte2/dist/img/avatar.png') }}" class="img-circle" alt="User Image"/>
|
|
|
|
{% endif %}
|
|
|
|
<p>
|
|
|
|
{{ current_user.firstname }} {{ current_user.lastname }}
|
|
|
|
<small>{{ current_user.role.name }}</small>
|
|
|
|
</p>
|
|
|
|
</li>
|
|
|
|
<!-- Menu Footer-->
|
|
|
|
<li class="user-footer">
|
|
|
|
<div class="pull-left">
|
2016-05-11 00:03:32 +00:00
|
|
|
<a href="{{ url_for('user_profile') }}" class="btn btn-default btn-flat">My Profile</a>
|
2015-12-13 09:34:12 +00:00
|
|
|
</div>
|
2016-04-22 00:37:33 +00:00
|
|
|
<div class="pull-right">
|
2016-04-22 23:31:15 +00:00
|
|
|
<a href="{{ url_for('logout') }}" class="btn btn-default btn-flat">Log out</a>
|
2016-04-22 00:37:33 +00:00
|
|
|
</div>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
|
|
</div>
|
|
|
|
</nav>
|
|
|
|
</header>
|
|
|
|
{% endblock %}
|
|
|
|
<!-- Left side column. contains the logo and sidebar -->
|
|
|
|
<aside class="main-sidebar">
|
|
|
|
<!-- sidebar: style can be found in sidebar.less -->
|
|
|
|
<section class="sidebar">
|
|
|
|
<!-- Sidebar user panel -->
|
|
|
|
<div class="user-panel">
|
|
|
|
<div class="pull-left image">
|
|
|
|
{% if current_user.avatar %}
|
|
|
|
<img src="{{ url_for('user_avatar', filename=current_user.avatar) }}" class="img-circle" alt="User Image"/>
|
|
|
|
{% else %}
|
|
|
|
<img src="{{ url_for('static', filename='adminlte2/dist/img/avatar.png') }}" class="img-circle" alt="User Image"/>
|
|
|
|
{% endif %}
|
2015-12-13 09:34:12 +00:00
|
|
|
</div>
|
2016-04-22 00:37:33 +00:00
|
|
|
<div class="pull-left info">
|
|
|
|
<p>{{ current_user.firstname }} {{ current_user.lastname }}</p>
|
|
|
|
<a href="#"><i class="fa fa-circle text-success"></i> Logged In</a>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<!-- /.search form -->
|
|
|
|
<!-- sidebar menu: : style can be found in sidebar.less -->
|
|
|
|
<ul class="sidebar-menu">
|
|
|
|
<li class="header">USER ACTIONS</li>
|
|
|
|
<li><a href="{{ url_for('dashboard') }}"><i class="fa fa-dashboard"></i> <span>Dashboard</span></a></li>
|
|
|
|
{% if current_user.role.name == 'Administrator' %}
|
2016-04-23 02:05:13 +00:00
|
|
|
<li><a href="{{ url_for('domain_add') }}"><i class="fa fa-plus"></i> <span>New Domain</span></a></li>
|
2016-04-22 00:37:33 +00:00
|
|
|
<li class="header">ADMINISTRATION</li>
|
2016-04-29 21:39:51 +00:00
|
|
|
<li><a href="{{ url_for('admin') }}"><i class="fa fa-wrench"></i> <span>Admin Console</span></a></li>
|
|
|
|
<li><a href="{{ url_for('admin_manageuser') }}"><i class="fa fa-users"></i> <span>Users</span></a></li>
|
|
|
|
<li><a href="{{ url_for('admin_history') }}"><i class="fa fa-calendar"></i> <span>History</span></a></li>
|
|
|
|
<li><a href="{{ url_for('admin_settings') }}"><i class="fa fa-cog"></i> <span>Settings</span></a></li>
|
2016-04-22 00:37:33 +00:00
|
|
|
{% endif %}
|
|
|
|
</section>
|
|
|
|
<!-- /.sidebar -->
|
|
|
|
</aside>
|
2015-12-13 09:34:12 +00:00
|
|
|
|
2016-04-22 00:37:33 +00:00
|
|
|
<!-- Content Wrapper. Contains page content -->
|
|
|
|
<div class="content-wrapper">
|
|
|
|
{% block dashboard_stat %}
|
|
|
|
<!-- Content Header (Page header) -->
|
|
|
|
<section class="content-header">
|
|
|
|
<h1>
|
|
|
|
Dashboard
|
|
|
|
<small>Control panel</small>
|
|
|
|
</h1>
|
|
|
|
<ol class="breadcrumb">
|
|
|
|
<li><a href="{{ url_for('dashboard') }}"><i class="fa fa-dashboard"></i> Home</a></li>
|
|
|
|
<li class="active">Dashboard</li>
|
|
|
|
</ol>
|
|
|
|
</section>
|
2015-12-13 09:34:12 +00:00
|
|
|
{% endblock %}
|
|
|
|
|
2016-04-22 00:37:33 +00:00
|
|
|
<!-- Main content -->
|
|
|
|
{% block content %}
|
|
|
|
<section class="content">
|
|
|
|
<!-- Small boxes (Stat box) -->
|
|
|
|
<div class="row">
|
|
|
|
<div class="col-lg-3 col-xs-6">
|
|
|
|
<!-- small box -->
|
|
|
|
<div class="small-box bg-aqua">
|
|
|
|
<div class="inner">
|
|
|
|
<h3>150</h3>
|
|
|
|
<p>Domains</p>
|
2015-12-13 09:34:12 +00:00
|
|
|
</div>
|
2016-04-22 00:37:33 +00:00
|
|
|
<div class="icon">
|
|
|
|
<i class="ion ion-bag"></i>
|
|
|
|
</div>
|
|
|
|
<a href="#" class="small-box-footer">More info <i class="fa fa-arrow-circle-right"></i></a>
|
|
|
|
</div>
|
2015-12-13 09:34:12 +00:00
|
|
|
</div>
|
2016-04-22 00:37:33 +00:00
|
|
|
<!-- ./col -->
|
|
|
|
<div class="col-lg-3 col-xs-6">
|
|
|
|
<!-- small box -->
|
|
|
|
<div class="small-box bg-green">
|
|
|
|
<div class="inner">
|
|
|
|
<h3>53<sup style="font-size: 20px">%</sup></h3>
|
|
|
|
<p>Users</p>
|
|
|
|
</div>
|
|
|
|
<div class="icon">
|
|
|
|
<i class="ion ion-stats-bars"></i>
|
2015-12-13 09:34:12 +00:00
|
|
|
</div>
|
2016-04-22 00:37:33 +00:00
|
|
|
<a href="#" class="small-box-footer">More info <i class="fa fa-arrow-circle-right"></i></a>
|
|
|
|
</div>
|
2015-12-13 09:34:12 +00:00
|
|
|
</div>
|
2016-04-22 00:37:33 +00:00
|
|
|
<!-- ./col -->
|
|
|
|
<div class="col-lg-3 col-xs-6">
|
|
|
|
<!-- small box -->
|
|
|
|
<div class="small-box bg-yellow">
|
|
|
|
<div class="inner">
|
|
|
|
<h3>44</h3>
|
|
|
|
<p>Histories</p>
|
|
|
|
</div>
|
|
|
|
<div class="icon">
|
|
|
|
<i class="ion ion-person-add"></i>
|
|
|
|
</div>
|
|
|
|
<a href="#" class="small-box-footer">More info <i class="fa fa-arrow-circle-right"></i></a>
|
|
|
|
</div>
|
2015-12-13 09:34:12 +00:00
|
|
|
</div>
|
2016-04-22 00:37:33 +00:00
|
|
|
<!-- ./col -->
|
|
|
|
<div class="col-lg-3 col-xs-6">
|
|
|
|
<!-- small box -->
|
|
|
|
<div class="small-box bg-red">
|
|
|
|
<div class="inner">
|
|
|
|
<h3>65</h3>
|
|
|
|
<p>Uptime</p>
|
|
|
|
</div>
|
|
|
|
<div class="icon">
|
|
|
|
<i class="ion ion-pie-graph"></i>
|
|
|
|
</div>
|
|
|
|
<a href="#" class="small-box-footer">More info <i class="fa fa-arrow-circle-right"></i></a>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<!-- ./col -->
|
|
|
|
</div>
|
|
|
|
<!-- /.row -->
|
|
|
|
<!-- Main row -->
|
|
|
|
<div class="row">
|
|
|
|
<!-- Left col -->
|
|
|
|
<section class="col-lg-7 connectedSortable">
|
|
|
|
<!-- Custom tabs (Charts with tabs)-->
|
|
|
|
<div class="nav-tabs-custom">
|
|
|
|
<!-- Tabs within a box -->
|
|
|
|
<ul class="nav nav-tabs pull-right">
|
|
|
|
<li class="active"><a href="#revenue-chart" data-toggle="tab">Area</a></li>
|
|
|
|
<li><a href="#sales-chart" data-toggle="tab">Donut</a></li>
|
|
|
|
<li class="pull-left header"><i class="fa fa-inbox"></i> Sales</li>
|
|
|
|
</ul>
|
|
|
|
<div class="tab-content no-padding">
|
|
|
|
<!-- Morris chart - Sales -->
|
|
|
|
<div class="chart tab-pane active" id="revenue-chart" style="position: relative; height: 300px;"></div>
|
|
|
|
<div class="chart tab-pane" id="sales-chart" style="position: relative; height: 300px;"></div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<!-- /.nav-tabs-custom -->
|
|
|
|
</section>
|
|
|
|
<!-- /.Left col -->
|
|
|
|
<!-- right col (We are only adding the ID to make the widgets sortable)-->
|
|
|
|
<section class="col-lg-5 connectedSortable">
|
2015-12-13 09:34:12 +00:00
|
|
|
|
2016-04-22 00:37:33 +00:00
|
|
|
</section>
|
|
|
|
<!-- right col -->
|
|
|
|
</div>
|
|
|
|
<!-- /.row (main row) -->
|
2015-12-13 09:34:12 +00:00
|
|
|
|
2016-04-22 00:37:33 +00:00
|
|
|
</section>
|
2015-12-13 09:34:12 +00:00
|
|
|
{% endblock %}
|
2016-04-22 00:37:33 +00:00
|
|
|
<!-- /.content -->
|
|
|
|
</div>
|
|
|
|
<!-- /.content-wrapper -->
|
|
|
|
<footer class="main-footer">
|
|
|
|
<div class="pull-right hidden-xs">
|
|
|
|
<b>PowerDNS-Admin</b>
|
|
|
|
</div>
|
|
|
|
<strong>Copyright © 2016 <a href="http://duykhanh.me">Khanh Ngo</a>.</strong> All rights reserved.
|
|
|
|
</footer>
|
|
|
|
</div>
|
|
|
|
<!-- ./wrapper -->
|
2015-12-13 09:34:12 +00:00
|
|
|
|
2016-04-22 00:37:33 +00:00
|
|
|
{% block scripts %}
|
|
|
|
<!-- jQuery 2.2.0 -->
|
|
|
|
<script src="{{ url_for('static', filename='adminlte2/plugins/jQuery/jQuery-2.2.0.min.js') }}"></script>
|
|
|
|
<!-- jQuery UI 1.11.4 -->
|
|
|
|
<script src="https://code.jquery.com/ui/1.11.4/jquery-ui.min.js"></script>
|
|
|
|
<!-- Resolve conflict in jQuery UI tooltip with Bootstrap tooltip -->
|
|
|
|
<script>
|
|
|
|
$.widget.bridge('uibutton', $.ui.button);
|
|
|
|
</script>
|
|
|
|
<!-- Bootstrap 3.3.6 -->
|
|
|
|
<script src="{{ url_for('static', filename='adminlte2/bootstrap/js/bootstrap.min.js') }}"></script>
|
2016-04-22 07:06:01 +00:00
|
|
|
<!-- DataTables -->
|
|
|
|
<script src="{{ url_for('static', filename='adminlte2/plugins/datatables/jquery.dataTables.min.js') }}"></script>
|
|
|
|
<script src="{{ url_for('static', filename='adminlte2/plugins/datatables/dataTables.bootstrap.min.js') }}"></script>
|
2016-04-22 00:37:33 +00:00
|
|
|
<!-- Sparkline -->
|
|
|
|
<script src="{{ url_for('static', filename='adminlte2/plugins/sparkline/jquery.sparkline.min.js') }}"></script>
|
|
|
|
<!-- Slimscroll -->
|
|
|
|
<script src="{{ url_for('static', filename='adminlte2/plugins/slimScroll/jquery.slimscroll.min.js') }}"></script>
|
2016-04-23 01:45:34 +00:00
|
|
|
<!-- iCheck 1.0.1 -->
|
|
|
|
<script src="{{ url_for('static', filename='adminlte2/plugins/iCheck/icheck.min.js') }}"></script>
|
2016-04-22 00:37:33 +00:00
|
|
|
<!-- FastClick -->
|
|
|
|
<script src="{{ url_for('static', filename='adminlte2/plugins/fastclick/fastclick.js') }}"></script>
|
|
|
|
<!-- AdminLTE App -->
|
|
|
|
<script src="{{ url_for('static', filename='adminlte2/dist/js/app.min.js') }}"></script>
|
2016-04-24 19:42:13 +00:00
|
|
|
<!-- Multiselect -->
|
|
|
|
<script src="{{ url_for('static', filename='multiselect/js/jquery.multi-select.js') }}"></script>
|
2016-04-22 07:06:01 +00:00
|
|
|
<!-- PowerDNS-Admin custom.js -->
|
|
|
|
<script src="{{ url_for('static', filename='custom/js/custom.js') }}"></script>
|
|
|
|
{% endblock %}
|
|
|
|
{% block extrascripts %}
|
|
|
|
{% endblock %}
|
2016-04-23 01:45:34 +00:00
|
|
|
{% block defaultmodals %}
|
|
|
|
<div class="modal fade modal-danger" id="modal_error">
|
2016-04-28 04:05:41 +00:00
|
|
|
<div class="modal-dialog">
|
|
|
|
<div class="modal-content">
|
|
|
|
<div class="modal-header">
|
|
|
|
<button type="button" class="close" data-dismiss="modal"
|
|
|
|
aria-label="Close">
|
|
|
|
<span aria-hidden="true">×</span>
|
|
|
|
</button>
|
|
|
|
<h4 class="modal-title">Error</h4>
|
|
|
|
</div>
|
|
|
|
<div class="modal-body">
|
|
|
|
<p></p>
|
|
|
|
</div>
|
|
|
|
<div class="modal-footer">
|
|
|
|
<button type="button" class="btn btn-default pull-right"
|
|
|
|
data-dismiss="modal">Close</button>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<!-- /.modal-content -->
|
|
|
|
</div>
|
|
|
|
<!-- /.modal-dialog -->
|
2016-04-23 01:45:34 +00:00
|
|
|
</div>
|
|
|
|
<!-- /.modal -->
|
|
|
|
<div class="modal fade modal-success" id="modal_success">
|
2016-04-28 04:05:41 +00:00
|
|
|
<div class="modal-dialog">
|
|
|
|
<div class="modal-content">
|
|
|
|
<div class="modal-header">
|
|
|
|
<button type="button" class="close" data-dismiss="modal"
|
|
|
|
aria-label="Close">
|
|
|
|
<span aria-hidden="true">×</span>
|
|
|
|
</button>
|
|
|
|
<h4 class="modal-title">Success</h4>
|
|
|
|
</div>
|
|
|
|
<div class="modal-body">
|
|
|
|
<p></p>
|
|
|
|
</div>
|
|
|
|
<div class="modal-footer">
|
|
|
|
<button type="button" class="btn btn-default pull-right"
|
|
|
|
data-dismiss="modal">Close</button>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<!-- /.modal-content -->
|
|
|
|
</div>
|
|
|
|
<!-- /.modal-dialog -->
|
2016-04-23 01:45:34 +00:00
|
|
|
</div>
|
|
|
|
<!-- /.modal -->
|
|
|
|
{% endblock %}
|
2016-04-22 07:06:01 +00:00
|
|
|
{% block modals %}
|
2016-04-22 00:37:33 +00:00
|
|
|
{% endblock %}
|
|
|
|
</body>
|
2016-04-21 15:20:09 +00:00
|
|
|
</html>
|