Initial commit

This commit is contained in:
Khanh Ngo
2015-12-13 16:34:12 +07:00
commit 2dac8205f6
3113 changed files with 514935 additions and 0 deletions

59
app/templates/400.html Normal file
View File

@ -0,0 +1,59 @@
{% extends "base.html" %}
{% block head %}
{{ super() }}
<!-- BEGIN PAGE LEVEL PLUGIN STYLES -->
<link href="{{ url_for('static', filename='admin/pages/css/error.css') }}" rel="stylesheet" type="text/css"/>
<!-- END PAGE LEVEL PLUGIN STYLES -->
<!-- BEGIN THEME STYLES -->
<!-- DOC: To use 'rounded corners' style just load 'components-rounded.css' stylesheet instead of 'components.css' in the below style tag -->
<link href="{{ url_for('static', filename='global/css/components-md.css') }}" id="style_components" rel="stylesheet" type="text/css"/>
<link href="{{ url_for('static', filename='global/css/plugins-md.css') }}" rel="stylesheet" type="text/css"/>
<link href="{{ url_for('static', filename='admin/layout2/css/layout.css') }}" rel="stylesheet" type="text/css"/>
<link href="{{ url_for('static', filename='admin/layout2/css/themes/grey.css') }}" rel="stylesheet" type="text/css" id="style_color"/>
<link href="{{ url_for('static', filename='admin/layout2/css/custom.css') }}" rel="stylesheet" type="text/css"/>
<!-- END THEME STYLES -->
{% endblock %}
{% block title %}<title>DNS Control Panel - 400 Error</title>{% endblock %}
{% block dashboard_stat %}
{% endblock %}
{% block content %}
<div class="clearfix">
</div>
<!-- BEGIN PAGE CONTENT-->
<div class="row">
<div class="col-md-12 page-500">
<div class=" number">
400
</div>
<div class=" details">
<h3>Bad Request</h3>
<p>
{% if msg %}
<p>Message: {{ msg }}<p>
{% endif %}
<a href="{{ url_for('index')}}"><strong>Click here</strong></a> to go home<br/><br/>
</p>
</div>
</div>
</div>
<!-- END PAGE CONTENT-->
{% endblock %}
{% block scripts %}
{{ super() }}
<!-- BEGIN PAGE LEVEL SCRIPTS -->
<script src="{{ url_for('static', filename='global/scripts/metronic.js') }}" type="text/javascript"></script>
<script src="{{ url_for('static', filename='admin/layout2/scripts/layout.js') }}" type="text/javascript"></script>
<script>
jQuery(document).ready(function() {
Metronic.init(); // init metronic core componets
Layout.init(); // init layout
});
</script>
<!-- END JAVASCRIPTS -->
{% endblock %}

56
app/templates/401.html Normal file
View File

@ -0,0 +1,56 @@
{% extends "base.html" %}
{% block head %}
{{ super() }}
<!-- BEGIN PAGE LEVEL PLUGIN STYLES -->
<link href="{{ url_for('static', filename='admin/pages/css/error.css') }}" rel="stylesheet" type="text/css"/>
<!-- END PAGE LEVEL PLUGIN STYLES -->
<!-- BEGIN THEME STYLES -->
<!-- DOC: To use 'rounded corners' style just load 'components-rounded.css' stylesheet instead of 'components.css' in the below style tag -->
<link href="{{ url_for('static', filename='global/css/components-md.css') }}" id="style_components" rel="stylesheet" type="text/css"/>
<link href="{{ url_for('static', filename='global/css/plugins-md.css') }}" rel="stylesheet" type="text/css"/>
<link href="{{ url_for('static', filename='admin/layout2/css/layout.css') }}" rel="stylesheet" type="text/css"/>
<link href="{{ url_for('static', filename='admin/layout2/css/themes/grey.css') }}" rel="stylesheet" type="text/css" id="style_color"/>
<link href="{{ url_for('static', filename='admin/layout2/css/custom.css') }}" rel="stylesheet" type="text/css"/>
<!-- END THEME STYLES -->
{% endblock %}
{% block title %}<title>DNS Control Panel - 401 Error</title>{% endblock %}
{% block dashboard_stat %}
{% endblock %}
{% block content %}
<div class="clearfix">
</div>
<!-- BEGIN PAGE CONTENT-->
<div class="row">
<div class="col-md-12 page-500">
<div class=" number">
401
</div>
<div class=" details">
<h3>You don't have permission to access this page.</h3>
<p>
<a href="{{ url_for('index')}}"><strong>Click here</strong></a> to go home<br/><br/>
</p>
</div>
</div>
</div>
<!-- END PAGE CONTENT-->
{% endblock %}
{% block scripts %}
{{ super() }}
<!-- BEGIN PAGE LEVEL SCRIPTS -->
<script src="{{ url_for('static', filename='global/scripts/metronic.js') }}" type="text/javascript"></script>
<script src="{{ url_for('static', filename='admin/layout2/scripts/layout.js') }}" type="text/javascript"></script>
<script>
jQuery(document).ready(function() {
Metronic.init(); // init metronic core componets
Layout.init(); // init layout
});
</script>
<!-- END JAVASCRIPTS -->
{% endblock %}

57
app/templates/404.html Normal file
View File

@ -0,0 +1,57 @@
{% extends "base.html" %}
{% block head %}
{{ super() }}
<!-- BEGIN PAGE LEVEL PLUGIN STYLES -->
<link href="{{ url_for('static', filename='admin/pages/css/error.css') }}" rel="stylesheet" type="text/css"/>
<!-- END PAGE LEVEL PLUGIN STYLES -->
<!-- BEGIN THEME STYLES -->
<!-- DOC: To use 'rounded corners' style just load 'components-rounded.css' stylesheet instead of 'components.css' in the below style tag -->
<link href="{{ url_for('static', filename='global/css/components-md.css') }}" id="style_components" rel="stylesheet" type="text/css"/>
<link href="{{ url_for('static', filename='global/css/plugins-md.css') }}" rel="stylesheet" type="text/css"/>
<link href="{{ url_for('static', filename='admin/layout2/css/layout.css') }}" rel="stylesheet" type="text/css"/>
<link href="{{ url_for('static', filename='admin/layout2/css/themes/grey.css') }}" rel="stylesheet" type="text/css" id="style_color"/>
<link href="{{ url_for('static', filename='admin/layout2/css/custom.css') }}" rel="stylesheet" type="text/css"/>
<!-- END THEME STYLES -->
{% endblock %}
{% block title %}<title>DNS Control Panel - 404 Error</title>{% endblock %}
{% block dashboard_stat %}
{% endblock %}
{% block content %}
<div class="clearfix">
</div>
<!-- BEGIN PAGE CONTENT-->
<div class="row">
<div class="col-md-12 page-500">
<div class=" number">
404
</div>
<div class=" details">
<h3>Oops! You're lost.</h3>
<p>
We can not find the page you're looking for.<br/>
<a href="{{ url_for('index')}}"><strong>Click here</strong></a> to go home<br/><br/>
</p>
</div>
</div>
</div>
<!-- END PAGE CONTENT-->
{% endblock %}
{% block scripts %}
{{ super() }}
<!-- BEGIN PAGE LEVEL SCRIPTS -->
<script src="{{ url_for('static', filename='global/scripts/metronic.js') }}" type="text/javascript"></script>
<script src="{{ url_for('static', filename='admin/layout2/scripts/layout.js') }}" type="text/javascript"></script>
<script>
jQuery(document).ready(function() {
Metronic.init(); // init metronic core componets
Layout.init(); // init layout
});
</script>
<!-- END JAVASCRIPTS -->
{% endblock %}

57
app/templates/500.html Normal file
View File

@ -0,0 +1,57 @@
{% extends "base.html" %}
{% block head %}
{{ super() }}
<!-- BEGIN PAGE LEVEL PLUGIN STYLES -->
<link href="{{ url_for('static', filename='admin/pages/css/error.css') }}" rel="stylesheet" type="text/css"/>
<!-- END PAGE LEVEL PLUGIN STYLES -->
<!-- BEGIN THEME STYLES -->
<!-- DOC: To use 'rounded corners' style just load 'components-rounded.css' stylesheet instead of 'components.css' in the below style tag -->
<link href="{{ url_for('static', filename='global/css/components-md.css') }}" id="style_components" rel="stylesheet" type="text/css"/>
<link href="{{ url_for('static', filename='global/css/plugins-md.css') }}" rel="stylesheet" type="text/css"/>
<link href="{{ url_for('static', filename='admin/layout2/css/layout.css') }}" rel="stylesheet" type="text/css"/>
<link href="{{ url_for('static', filename='admin/layout2/css/themes/grey.css') }}" rel="stylesheet" type="text/css" id="style_color"/>
<link href="{{ url_for('static', filename='admin/layout2/css/custom.css') }}" rel="stylesheet" type="text/css"/>
<!-- END THEME STYLES -->
{% endblock %}
{% block title %}<title>DNS Control Panel - 500 Error</title>{% endblock %}
{% block dashboard_stat %}
{% endblock %}
{% block content %}
<div class="clearfix">
</div>
<!-- BEGIN PAGE CONTENT-->
<div class="row">
<div class="col-md-12 page-500">
<div class=" number">
500
</div>
<div class=" details">
<h3>Oops! Something went wrong.</h3>
<p>
Please come back in a while.<br/>
<a href="{{ url_for('index')}}"><strong>Click here</strong></a> to go home<br/><br/>
</p>
</div>
</div>
</div>
<!-- END PAGE CONTENT-->
{% endblock %}
{% block scripts %}
{{ super() }}
<!-- BEGIN PAGE LEVEL SCRIPTS -->
<script src="{{ url_for('static', filename='global/scripts/metronic.js') }}" type="text/javascript"></script>
<script src="{{ url_for('static', filename='admin/layout2/scripts/layout.js') }}" type="text/javascript"></script>
<script>
jQuery(document).ready(function() {
Metronic.init(); // init metronic core componets
Layout.init(); // init layout
});
</script>
<!-- END JAVASCRIPTS -->
{% endblock %}

232
app/templates/admin.html Normal file
View File

@ -0,0 +1,232 @@
{% extends "base.html" %}
{% block head %}
{{ super() }}
<!-- BEGIN PAGE LEVEL PLUGIN STYLES -->
<link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='global/plugins/select2/select2.css') }}"/>
<link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='global/plugins/datatables/plugins/bootstrap/dataTables.bootstrap.css') }}"/>
<!-- END PAGE LEVEL PLUGIN STYLES -->
<!-- BEGIN THEME STYLES -->
<!-- DOC: To use 'rounded corners' style just load 'components-rounded.css' stylesheet instead of 'components.css' in the below style tag -->
<link href="{{ url_for('static', filename='global/css/components-md.css') }}" id="style_components" rel="stylesheet" type="text/css"/>
<link href="{{ url_for('static', filename='global/css/plugins-md.css') }}" rel="stylesheet" type="text/css"/>
<link href="{{ url_for('static', filename='admin/layout2/css/layout.css') }}" rel="stylesheet" type="text/css"/>
<link href="{{ url_for('static', filename='admin/layout2/css/themes/grey.css') }}" rel="stylesheet" type="text/css" id="style_color"/>
<link href="{{ url_for('static', filename='admin/layout2/css/custom.css') }}" rel="stylesheet" type="text/css"/>
<!-- END THEME STYLES -->
{% endblock %}
{% block title %}<title>DNS Control Panel - Admin Console</title>{% endblock %}
{% block dashboard_stat %}
<!-- BEGIN PAGE HEADER-->
<h3 class="page-title">
Admin Console</h3>
<div class="page-bar">
<ul class="page-breadcrumb">
<li>
<i class="fa fa-home"></i>
<a href="/">Home</a>
<i class="fa fa-angle-right"></i>
</li>
<li>
<a href="#">Admin Console</a>
</li>
</ul>
</div>
<!-- END PAGE HEADER-->
<!-- BEGIN DASHBOARD STATS -->
<div class="row">
<div class="col-lg-3 col-md-3 col-sm-6 col-xs-12">
<a class="dashboard-stat dashboard-stat-light blue-soft" href="javascript:;">
<div class="visual">
<i class="fa fa-cloud"></i>
</div>
<div class="details">
<div class="number">
{{ domains|length }}
</div>
<div class="desc">
{% if domains|length > 1 %}Domains{% else %}Domain{% endif %}
</div>
</div>
</a>
</div>
<div class="col-lg-3 col-md-3 col-sm-6 col-xs-12">
<a class="dashboard-stat dashboard-stat-light green-soft" href="javascript:;">
<div class="visual">
<i class="fa fa-user"></i>
</div>
<div class="details">
<div class="number">
{{ users|length }}
</div>
<div class="desc">
{% if users|length > 1 %}Users{% else %}User{% endif %}
</div>
</div>
</a>
</div>
<div class="col-lg-3 col-md-3 col-sm-6 col-xs-12">
<a class="dashboard-stat dashboard-stat-light purple-soft" href="javascript:;">
<div class="visual">
<i class="fa fa-exclamation-triangle"></i>
</div>
<div class="details">
<div class="number">
{{ history_number }}
</div>
<div class="desc">
{% if history_number > 1 %}Histories{% else %}History{% endif %}
</div>
</div>
</a>
</div>
<div class="col-lg-3 col-md-3 col-sm-6 col-xs-12">
<a class="dashboard-stat dashboard-stat-light red-soft" href="javascript:;">
<div class="visual">
<i class="fa fa-star"></i>
</div>
<div class="details">
<div class="number">
{{ uptime|display_second_to_time }}
</div>
<div class="desc">
Uptime
</div>
</div>
</a>
</div>
</div>
<!-- END DASHBOARD STATS -->
{% endblock %}
{% block content %}
<div class="clearfix">
</div>
<div class="row">
<div class="col-md-12">
<!-- BEGIN SERVER STATISTICS -->
<div class="portlet box grey-cascade">
<div class="portlet-title">
<div class="caption">
<i class="fa fa-sliders"></i>Server Statistics
</div>
<div class="tools">
<a href="javascript:;" class="reload">
</a>
<a href="javascript:;" class="collapse">
</a>
</div>
</div>
<div class="portlet-body">
<table class="table table-striped table-bordered table-hover" id="tb_stastic_list">
<thead>
<tr>
<th width="6%">
Docs
</th>
<th>
Statistic
</th>
<th>
Value
</th>
</tr>
</thead>
<tbody>
{% for statistic in statistics %}
<tr class="odd gradeX">
<td>
<a href="https://google.com/search?q=site:doc.powerdns.com+{{ statistic['name'] }}" target="_blank" class="btn btn-xs blue"><i class="fa fa-search"></i></a>
</td>
<td>
{{ statistic['name'] }}
</td>
<td>
{{ statistic['value'] }}
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>
<!-- END SERVER STATISTICS -->
</div>
</div>
<div class="row">
<div class="col-md-12">
<!-- BEGIN SERVER CONFIGURATION TABLE -->
<div class="portlet box grey-cascade">
<div class="portlet-title">
<div class="caption">
<i class="fa fa-gears"></i>Server Configuration
</div>
<div class="tools">
<a href="javascript:;" class="reload">
</a>
<a href="javascript:;" class="collapse">
</a>
</div>
</div>
<div class="portlet-body">
<table class="table table-striped table-bordered table-hover" id="tb_config_list">
<thead>
<tr>
<th width="6%">
Docs
</th>
<th>
Name
</th>
<th>
Value
</th>
</tr>
</thead>
<tbody>
{% for config in configs %}
<tr class="odd gradeX">
<td>
<a href="https://google.com/search?q=site:doc.powerdns.com+{{ config['name'] }}" target="_blank" class="btn btn-xs blue"><i class="fa fa-search"></i></a>
</td>
<td>
{{ config['name'] }}
</td>
<td>
{{ config['value'] }}
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>
<!-- END SERVER CONFIGURATION TABLE -->
</div>
</div>
{% endblock %}
{% block scripts %}
{{ super() }}
<!-- BEGIN PAGE LEVEL SCRIPTS -->
<script src="{{ url_for('static', filename='global/scripts/metronic.js') }}" type="text/javascript"></script>
<script src="{{ url_for('static', filename='admin/layout2/scripts/layout.js') }}" type="text/javascript"></script>
<!-- END PAGE LEVEL SCRIPTS -->
<!-- TABLE PLUGINS -->
<script type="text/javascript" src="{{ url_for('static', filename='global/plugins/select2/select2.min.js') }}"></script>
<script type="text/javascript" src="{{ url_for('static', filename='global/plugins/datatables/media/js/jquery.dataTables.min.js') }}"></script>
<script type="text/javascript" src="{{ url_for('static', filename='global/plugins/datatables/plugins/bootstrap/dataTables.bootstrap.js') }}"></script>
<script src="{{ url_for('static', filename='admin/pages/scripts/table-managed.js') }}"></script>
<!-- END TABLE PLUGINS -->
<script>
jQuery(document).ready(function() {
Metronic.init(); // init metronic core componets
Layout.init(); // init layout
TableManaged.init();
});
</script>
<!-- END JAVASCRIPTS -->
{% endblock %}

View File

@ -0,0 +1,144 @@
{% extends "base.html" %}
{% block head %}
{{ super() }}
<!-- BEGIN PAGE LEVEL PLUGIN STYLES -->
<link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='global/plugins/select2/select2.css') }}"/>
<link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='global/plugins/datatables/plugins/bootstrap/dataTables.bootstrap.css') }}"/>
<!-- END PAGE LEVEL PLUGIN STYLES -->
<!-- BEGIN THEME STYLES -->
<!-- DOC: To use 'rounded corners' style just load 'components-rounded.css' stylesheet instead of 'components.css' in the below style tag -->
<link href="{{ url_for('static', filename='global/css/components-md.css') }}" id="style_components" rel="stylesheet" type="text/css"/>
<link href="{{ url_for('static', filename='global/css/plugins-md.css') }}" rel="stylesheet" type="text/css"/>
<link href="{{ url_for('static', filename='admin/layout2/css/layout.css') }}" rel="stylesheet" type="text/css"/>
<link href="{{ url_for('static', filename='admin/layout2/css/themes/grey.css') }}" rel="stylesheet" type="text/css" id="style_color"/>
<link href="{{ url_for('static', filename='admin/layout2/css/custom.css') }}" rel="stylesheet" type="text/css"/>
<!-- END THEME STYLES -->
{% endblock %}
{% block title %}<title>DNS Control Panel - History</title>{% endblock %}
{% block dashboard_stat %}
<!-- BEGIN PAGE HEADER-->
<h3 class="page-title">
History</h3>
<div class="page-bar">
<ul class="page-breadcrumb">
<li>
<i class="fa fa-home"></i>
<a href="/">Home</a>
<i class="fa fa-angle-right"></i>
</li>
<li>
<a href="{{ url_for('admin') }}">Admin</a>
<i class="fa fa-angle-right"></i>
</li>
<li>
<a href="#">History</a>
</li>
</ul>
</div>
<!-- END PAGE HEADER-->
{% endblock %}
{% block content %}
<div class="clearfix">
</div>
<div class="row">
<div class="col-md-12">
<!-- BEGIN HISTORY TABLE -->
<div class="portlet box blue">
<div class="portlet-title">
<div class="caption">
<i class="fa fa-users"></i> History Management
</div>
<div class="tools">
<a href="javascript:;" class="collapse">
</a>
<a href="javascript:;" class="reload">
</a>
</div>
</div>
<div class="portlet-body">
<div class="table-toolbar">
<div class="row">
<div class="col-md-12">
<div class="btn-group pull-right">
<button id="tbl_history_clear" class="btn red">
Clear History <i class="fa fa-trash"></i>
</button>
</div>
</div>
</div>
</div>
<table class="table table-striped table-hover table-bordered" id="tbl_history">
<thead>
<tr>
<th>
Changed by
</th>
<th>
Content
</th>
<th>
Time
</th>
<th>
Detail
</th>
</tr>
</thead>
<tbody>
{% for history in histories %}
<tr class="odd gradeX">
<td>
{{ history.created_by }}
</td>
<td>
{{ history.msg }}
</td>
<td>
{{ history.created_on }}
</td>
<td width="6%">
<input type="hidden" name="history_detail" value="{{ history.detail }}">
<a class="btn default btn-xs blue history_detail" href="javascript:;"> <i class="fa fa-info"></i>Info</a>
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>
<!-- END HISTORY TABLE -->
</div>
</div>
<div class="row">
<!-- MORE CONTENT GO HERE -->
</div>
{% endblock %}
{% block scripts %}
{{ super() }}
<!-- BEGIN PAGE LEVEL SCRIPTS -->
<script src="{{ url_for('static', filename='global/scripts/metronic.js') }}" type="text/javascript"></script>
<script src="{{ url_for('static', filename='admin/layout2/scripts/layout.js') }}" type="text/javascript"></script>
<script src="{{ url_for('static', filename='global/plugins/bootbox/bootbox.min.js') }}" type="text/javascript"></script>
<!-- END PAGE LEVEL SCRIPTS -->
<!-- TABLE PLUGINS -->
<script type="text/javascript" src="{{ url_for('static', filename='global/plugins/select2/select2.min.js') }}"></script>
<script type="text/javascript" src="{{ url_for('static', filename='global/plugins/datatables/media/js/jquery.dataTables.min.js') }}"></script>
<script type="text/javascript" src="{{ url_for('static', filename='global/plugins/datatables/plugins/bootstrap/dataTables.bootstrap.js') }}"></script>
<script src="{{ url_for('static', filename='admin/pages/scripts/table-managed.js') }}"></script>
<!-- END TABLE PLUGINS -->
<script>
jQuery(document).ready(function() {
Metronic.init(); // init metronic core componets
Layout.init(); // init layout
TableManaged.init();
});
</script>
<!-- END JAVASCRIPTS -->
{% endblock %}

View File

@ -0,0 +1,150 @@
{% extends "base.html" %}
{% block head %}
{{ super() }}
<!-- BEGIN PAGE LEVEL PLUGIN STYLES -->
<link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='global/plugins/select2/select2.css') }}"/>
<link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='global/plugins/datatables/plugins/bootstrap/dataTables.bootstrap.css') }}"/>
<!-- END PAGE LEVEL PLUGIN STYLES -->
<!-- BEGIN THEME STYLES -->
<!-- DOC: To use 'rounded corners' style just load 'components-rounded.css' stylesheet instead of 'components.css' in the below style tag -->
<link href="{{ url_for('static', filename='global/css/components-md.css') }}" id="style_components" rel="stylesheet" type="text/css"/>
<link href="{{ url_for('static', filename='global/css/plugins-md.css') }}" rel="stylesheet" type="text/css"/>
<link href="{{ url_for('static', filename='admin/layout2/css/layout.css') }}" rel="stylesheet" type="text/css"/>
<link href="{{ url_for('static', filename='admin/layout2/css/themes/grey.css') }}" rel="stylesheet" type="text/css" id="style_color"/>
<link href="{{ url_for('static', filename='admin/layout2/css/custom.css') }}" rel="stylesheet" type="text/css"/>
<!-- END THEME STYLES -->
{% endblock %}
{% block title %}<title>DNS Control Panel - User Management</title>{% endblock %}
{% block dashboard_stat %}
<!-- BEGIN PAGE HEADER-->
<h3 class="page-title">
User Management</h3>
<div class="page-bar">
<ul class="page-breadcrumb">
<li>
<i class="fa fa-home"></i>
<a href="/">Home</a>
<i class="fa fa-angle-right"></i>
</li>
<li>
<a href="{{ url_for('admin') }}">Admin</a>
<i class="fa fa-angle-right"></i>
</li>
<li>
<a href="#">User Management</a>
</li>
</ul>
</div>
<!-- END PAGE HEADER-->
{% endblock %}
{% block content %}
<div class="clearfix">
</div>
<div class="row">
<div class="col-md-12">
<!-- BEGIN USER MANAGEMENT -->
<div class="portlet box blue">
<div class="portlet-title">
<div class="caption">
<i class="fa fa-users"></i> Users Available In Database
</div>
<div class="tools">
<a href="javascript:;" class="collapse">
</a>
<a href="javascript:;" class="reload">
</a>
</div>
</div>
<div class="portlet-body">
<table class="table table-striped table-hover table-bordered" id="tbl_user_manage">
<thead>
<tr>
<th>
Username
</th>
<th>
First Name
</th>
<th>
Last Name
</th>
<th>
Admin
</th>
<th>
Privileges
</th>
<th>
Deletion
</th>
</tr>
</thead>
<tbody>
{% for user in users %}
<tr class="odd gradeX">
<td>
{{ user.username }}
</td>
<td>
{{ user.firstname }}
</td>
<td>
{{ user.lastname }}
</td>
<td>
<div class="md-checkbox has-error">
<input type="checkbox" id="ck_admin_{{ user.username }}" class="md-check ck_admin" {% if user.role.name == 'Administrator' %}checked=""{% endif %}>
<label for="ck_admin_{{ user.username }}">
<span class="inc"></span>
<span class="check"></span>
<span class="box"></span>
</label>
</div>
</td>
<td width="6%">
<a class="btn default btn-xs purple revoke" href="javascript:;"> <i class="fa fa-lock"></i>Revoke</a>
</td>
<td width="6%">
<a class="btn default btn-xs red delete" href="javascript:;"> <i class="fa fa-trash-o"></i>Delete</a>
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>
<!-- END USER MANAGEMENT -->
</div>
</div>
<div class="row">
<!-- MORE CONTENT GO HERE -->
</div>
{% endblock %}
{% block scripts %}
{{ super() }}
<!-- BEGIN PAGE LEVEL SCRIPTS -->
<script src="{{ url_for('static', filename='global/scripts/metronic.js') }}" type="text/javascript"></script>
<script src="{{ url_for('static', filename='admin/layout2/scripts/layout.js') }}" type="text/javascript"></script>
<script src="{{ url_for('static', filename='global/plugins/bootbox/bootbox.min.js') }}" type="text/javascript"></script>
<!-- END PAGE LEVEL SCRIPTS -->
<!-- TABLE PLUGINS -->
<script type="text/javascript" src="{{ url_for('static', filename='global/plugins/select2/select2.min.js') }}"></script>
<script type="text/javascript" src="{{ url_for('static', filename='global/plugins/datatables/media/js/jquery.dataTables.min.js') }}"></script>
<script type="text/javascript" src="{{ url_for('static', filename='global/plugins/datatables/plugins/bootstrap/dataTables.bootstrap.js') }}"></script>
<script src="{{ url_for('static', filename='admin/pages/scripts/table-managed.js') }}"></script>
<!-- END TABLE PLUGINS -->
<script>
jQuery(document).ready(function() {
Metronic.init(); // init metronic core componets
Layout.init(); // init layout
TableManaged.init();
});
</script>
<!-- END JAVASCRIPTS -->
{% endblock %}

252
app/templates/base.html Normal file
View File

@ -0,0 +1,252 @@
<!DOCTYPE html>
<html>
<!-- BEGIN HEAD -->
<head>
{% block head %}
<meta charset="utf-8">
{% block title %}<title>DNS Control Panel</title>{% endblock %}
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta content="width=device-width, initial-scale=1" name="viewport">
<meta content="" name="description">
<meta content="" name="author">
<!-- BEGIN GLOBAL MANDATORY STYLES -->
<link href="http://fonts.googleapis.com/css?family=Open+Sans:400,300,600,700&subset=all" rel="stylesheet" type="text/css"/>
<link href="{{ url_for('static', filename='global/plugins/font-awesome/css/font-awesome.min.css') }}" rel="stylesheet" type="text/css"/>
<link href="{{ url_for('static', filename='global/plugins/simple-line-icons/simple-line-icons.min.css') }}" rel="stylesheet" type="text/css"/>
<link href="{{ url_for('static', filename='global/plugins/bootstrap/css/bootstrap.min.css') }}" rel="stylesheet" type="text/css"/>
<link href="{{ url_for('static', filename='global/plugins/uniform/css/uniform.default.css') }}" rel="stylesheet" type="text/css"/>
<link href="{{ url_for('static', filename='global/plugins/bootstrap-switch/css/bootstrap-switch.min.css') }}" rel="stylesheet" type="text/css"/>
<link rel="shortcut icon" href="{{ url_for('static', filename='global/img/favicon.ico') }}" type="image/x-icon" />
<!-- END GLOBAL MANDATORY STYLES -->
{% endblock %}
</head>
<!-- END HEAD -->
<body class="page-md page-boxed page-header-fixed page-sidebar-closed-hide-logo page-container-bg-solid page-sidebar-closed-hide-logo">
<!-- BEGIN HEADER -->
{% block pageheader %}
<div class="page-header md-shadow-z-1-i navbar navbar-fixed-top">
<!-- BEGIN HEADER INNER -->
<div class="page-header-inner container">
<!-- BEGIN LOGO -->
<div class="page-logo">
<a href="{{ url_for('index') }}">
<img src="{{ url_for('static', filename='global/img/be-logo.png') }}" alt="logo" class="logo-default" height="70%" width="70%" />
</a>
<div class="menu-toggler sidebar-toggler">
<!-- DOC: Remove the above "hide" to enable the sidebar toggler button on header -->
</div>
</div>
<!-- END LOGO -->
<!-- BEGIN RESPONSIVE MENU TOGGLER -->
<a href="javascript:;" class="menu-toggler responsive-toggler" data-toggle="collapse" data-target=".navbar-collapse">
</a>
<!-- END RESPONSIVE MENU TOGGLER -->
<!-- BEGIN PAGE TOP -->
<div class="page-top">
<!-- BEGIN HEADER SEARCH BOX -->
<!-- DOC: Apply "search-form-expanded" right after the "search-form" class to have half expanded search box -->
<form class="search-form search-form-expanded" action="search" method="GET">
<div class="input-group">
<input type="text" class="form-control" placeholder="Search..." name="query">
<span class="input-group-btn">
<a href="javascript:;" class="btn submit"><i class="icon-magnifier"></i></a>
</span>
</div>
</form>
<!-- END HEADER SEARCH BOX -->
<!-- BEGIN TOP NAVIGATION MENU -->
<div class="top-menu">
<ul class="nav navbar-nav pull-right">
{% block pageheader_userinfo %}
<!-- BEGIN NOTIFICATION DROPDOWN -->
<!-- DOC: Apply "dropdown-dark" class after below "dropdown-extended" to change the dropdown styte -->
<!--
<li class="dropdown dropdown-extended dropdown-notification" id="header_notification_bar">
<a href="javascript:;" class="dropdown-toggle" data-toggle="dropdown" data-hover="dropdown" data-close-others="true">
<i class="icon-bell"></i>
<span class="badge badge-default">
7 </span>
</a>
<ul class="dropdown-menu">
<li class="external">
<h3><span class="bold">12 pending</span> notifications</h3>
<a href="extra_profile.html">view all</a>
</li>
<li>
<ul class="dropdown-menu-list scroller" style="height: 250px;" data-handle-color="#637283">
<li>
<a href="javascript:;">
<span class="time">just now</span>
<span class="details">
<span class="label label-sm label-icon label-success">
<i class="fa fa-plus"></i>
</span>
New user registered. </span>
</a>
</li>
</ul>
</li>
</ul>
</li>
-->
<!-- END NOTIFICATION DROPDOWN -->
{% if current_user.username != 'Anonymous' %}
<!-- BEGIN USER LOGIN DROPDOWN -->
<!-- DOC: Apply "dropdown-dark" class after below "dropdown-extended" to change the dropdown styte -->
<li class="dropdown dropdown-user">
<a href="javascript:;" class="dropdown-toggle" data-toggle="dropdown" data-hover="dropdown" data-close-others="true">
<img alt="" class="img-circle" src="{{ url_for('static', filename='admin/layout2/img/avatar.png') }}"/>
<span class="username username-hide-on-mobile">
{% if current_user.is_authenticated() %} {{ current_user.firstname }} {% endif %}</span>
<i class="fa fa-angle-down"></i>
</a>
<ul class="dropdown-menu dropdown-menu-default">
<li>
<a href="{{ url_for('index') }}">
<i class="icon-user"></i> My Profile </a>
</li>
<li class="divider">
</li>
<li>
<a href="{{ url_for('logout') }}">
<i class="icon-key"></i> Log Out </a>
</li>
</ul>
</li>
<!-- END USER LOGIN DROPDOWN -->
{% endif %}
{% endblock %}
</ul>
</div>
<!-- END TOP NAVIGATION MENU -->
</div>
<!-- END PAGE TOP -->
</div>
<!-- END HEADER INNER -->
</div>
{% endblock %}
<!-- END HEADER -->
<div class="clearfix">
</div>
<!-- BEGIN PAGE CONTAINER -->
{% block pagecontainer %}
<!-- BEGIN CONTAINER -->
<div class="container">
<div class="page-container">
<!-- BEGIN SIDEBAR -->
<div class="page-sidebar-wrapper">
<!-- DOC: Set data-auto-scroll="false" to disable the sidebar from auto scrolling/focusing -->
<!-- DOC: Change data-auto-speed="200" to adjust the sub menu slide up/down speed -->
<div class="page-sidebar navbar-collapse collapse">
<!-- BEGIN SIDEBAR MENU -->
<!-- DOC: Apply "page-sidebar-menu-light" class right after "page-sidebar-menu" to enable light sidebar menu style(without borders) -->
<!-- DOC: Apply "page-sidebar-menu-hover-submenu" class right after "page-sidebar-menu" to enable hoverable(hover vs accordion) sub menu mode -->
<!-- DOC: Apply "page-sidebar-menu-closed" class right after "page-sidebar-menu" to collapse("page-sidebar-closed" class must be applied to the body element) the sidebar sub menu mode -->
<!-- DOC: Set data-auto-scroll="false" to disable the sidebar from auto scrolling/focusing -->
<!-- DOC: Set data-keep-expand="true" to keep the submenues expanded -->
<!-- DOC: Set data-auto-speed="200" to adjust the sub menu slide up/down speed -->
<ul class="page-sidebar-menu page-sidebar-menu-hover-submenu " data-keep-expanded="false" data-auto-scroll="true" data-slide-speed="200">
{% if current_user.username != 'Anonymous' %}
<li {% if request.path == "/dashboard" %}class="start active"{% endif %}>
<a href="{{ url_for('dashboard') }}">
<i class="icon-home"></i>
<span class="title">Dashboard</span>
{% if request.path == "/dashboard" %}<span class="selected"></span> {% endif %}
<span class="selected"></span>
</a>
</li>
{% if current_user.role.name == 'Administrator' %}
<li {% if request.path.startswith('/admin') %}class="start active"{% endif %}>
<a href="{{ url_for('admin') }}">
<i class="icon-settings"></i>
<span class="title">Admin</span>
<span class="arrow "></span>
{% if request.path.startswith('/admin') %}<span class="selected"></span> {% endif %}
</a>
<ul class="sub-menu">
<li>
<a href="{{ url_for('admin') }}">
<i class="icon-eye"></i>
Admin Console</a>
</li>
<li>
<a href="{{ url_for('dashboard') }}">
<i class="icon-globe"></i>
Manage Domain</a>
</li>
<li>
<a href="{{ url_for('admin_manageuser') }}">
<i class="icon-user"></i>
Manage User</a>
</li>
<li>
<a href="{{ url_for('admin_history') }}">
<i class="icon-speedometer"></i>
History</a>
</li>
</ul>
</li>
{% endif %}
{% endif %}
</ul>
<!-- END SIDEBAR MENU -->
</div>
</div>
<!-- END SIDEBAR -->
<!-- BEGIN CONTENT -->
<div class="page-content-wrapper">
<div class="page-content">
{% block dashboard_stat %}
{% endblock %}
{% block content %}
{% endblock %}
</div>
</div>
</div>
<!-- END CONTENT -->
<!-- BEGIN QUICK SIDEBAR -->
<!--Cooming Soon...-->
<!-- END QUICK SIDEBAR -->
</div>
<!-- END CONTAINER -->
</div>
{% endblock %}
<!-- BEGIN FOOTER -->
<div class="page-footer">
<div class="container">
2015 © <a href="http://duykhanh.me">Khanh Ngo</a>
</div>
</div>
<!-- END FOOTER -->
<div class="scroll-to-top">
<i class="icon-arrow-up"></i>
</div>
{% block scripts %}
<!-- BEGIN JAVASCRIPTS(Load javascripts at bottom, this will reduce page load time) -->
<!-- BEGIN CORE PLUGINS -->
<script src="{{ url_for('static', filename='global/plugins/jquery.min.js') }}" type="text/javascript"></script>
<script src="{{ url_for('static', filename='global/plugins/jquery-migrate.min.js') }}" type="text/javascript"></script>
<!-- IMPORTANT! Load jquery-ui.min.js before bootstrap.min.js to fix bootstrap tooltip conflict with jquery ui tooltip -->
<script src="{{ url_for('static', filename='global/plugins/jquery-ui/jquery-ui.min.js') }}" type="text/javascript"></script>
<script src="{{ url_for('static', filename='global/plugins/bootstrap/js/bootstrap.min.js') }}" type="text/javascript"></script>
<script src="{{ url_for('static', filename='global/plugins/bootstrap-hover-dropdown/bootstrap-hover-dropdown.min.js') }}" type="text/javascript"></script>
<script src="{{ url_for('static', filename='global/plugins/jquery-slimscroll/jquery.slimscroll.min.js') }}" type="text/javascript"></script>
<script src="{{ url_for('static', filename='global/plugins/jquery.blockui.min.js') }}" type="text/javascript"></script>
<script src="{{ url_for('static', filename='global/plugins/jquery.cokie.min.js') }}" type="text/javascript"></script>
<script src="{{ url_for('static', filename='global/plugins/uniform/jquery.uniform.min.js') }}" type="text/javascript"></script>
<script src="{{ url_for('static', filename='global/plugins/bootstrap-switch/js/bootstrap-switch.min.js') }}" type="text/javascript"></script>
<!-- END CORE PLUGINS -->
{% endblock %}
</body>
</html>

View File

@ -0,0 +1,153 @@
{% extends "base.html" %}
{% block head %}
{{ super() }}
<!-- BEGIN PAGE LEVEL PLUGIN STYLES -->
<link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='global/plugins/select2/select2.css') }}"/>
<link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='global/plugins/datatables/plugins/bootstrap/dataTables.bootstrap.css') }}"/>
<!-- END PAGE LEVEL PLUGIN STYLES -->
<!-- BEGIN THEME STYLES -->
<!-- DOC: To use 'rounded corners' style just load 'components-rounded.css' stylesheet instead of 'components.css' in the below style tag -->
<link href="{{ url_for('static', filename='global/css/components-md.css') }}" id="style_components" rel="stylesheet" type="text/css"/>
<link href="{{ url_for('static', filename='global/css/plugins-md.css') }}" rel="stylesheet" type="text/css"/>
<link href="{{ url_for('static', filename='admin/layout2/css/layout.css') }}" rel="stylesheet" type="text/css"/>
<link href="{{ url_for('static', filename='admin/layout2/css/themes/grey.css') }}" rel="stylesheet" type="text/css" id="style_color"/>
<link href="{{ url_for('static', filename='admin/layout2/css/custom.css') }}" rel="stylesheet" type="text/css"/>
<!-- END THEME STYLES -->
{% endblock %}
{% block title %}<title>DNS Control Panel - HOME</title>{% endblock %}
{% block dashboard_stat %}
<!-- BEGIN PAGE HEADER-->
<h3 class="page-title">
Dashboard</h3>
<div class="page-bar">
<ul class="page-breadcrumb">
<li>
<i class="fa fa-home"></i>
<a href="/">Home</a>
<i class="fa fa-angle-right"></i>
</li>
<li>
<a href="#">Dashboard</a>
</li>
</ul>
</div>
<!-- END PAGE HEADER-->
{% endblock %}
{% block content %}
<div class="clearfix">
</div>
<div class="row">
<div class="col-md-12">
<!-- BEGIN DOMAIN TABLE-->
<div class="portlet box grey-cascade">
<div class="portlet-title">
<div class="caption">
<i class="fa fa-globe"></i>DOMAINS
</div>
<div class="tools">
<a href="javascript:;" class="reload">
</a>
<a href="javascript:;" class="collapse">
</a>
</div>
</div>
<div class="portlet-body">
{% if current_user.role.name == 'Administrator' %}
<div class="table-toolbar">
<div class="row">
<div class="col-md-6">
<div class="btn-group">
<button id="btn_new_domain" class="btn green" onclick="window.location.href='{{ url_for('domain_add') }}'">
New Domain <i class="fa fa-plus"></i>
</button>
</div>
</div>
</div>
</div>
{% endif %}
<table class="table table-striped table-bordered table-hover" id="tb_vps_list">
<thead>
<tr>
<th>
Name
</th>
<th>
Kind
</th>
<th>
Serial
</th>
<th>
Master
</th>
<th>
Action
</th>
</tr>
</thead>
<tbody>
{% for domain in domains %}
<tr class="odd gradeX">
<td>
<a href="{{ url_for('domain', domain_name=domain.name) }}"><strong>{{ domain.name }}</strong></a>
</td>
<td>
{{ domain.type }}
</td>
<td>
{{ domain.serial }}
</td>
<td>
{% if domain.master == '[]'%}N/A {% else %}{{ domain.master|display_master_name }}{% endif %}
</td>
{% if current_user.role.name !='Administrator' %}
<td width="6%">
<a href="{{ url_for('domain', domain_name=domain.name) }}" class="btn default btn-xs green">Manage
<i class="fa fa-cog"></i></a>
</td>
{% else %}
<td width="18%">
<a href="{{ url_for('domain', domain_name=domain.name) }}" class="btn default btn-xs green">Manage
<a href="{{ url_for('domain_management', domain_name=domain.name)}}" class="btn default btn-xs red">Admin</a>
</td>
{% endif %}
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>
<!-- END DOMAIN TABLE-->
</div>
</div>
<div class="row">
<!-- MORE CONTENT GO HERE -->
</div>
{% endblock %}
{% block scripts %}
{{ super() }}
<!-- BEGIN PAGE LEVEL SCRIPTS -->
<script src="{{ url_for('static', filename='global/scripts/metronic.js') }}" type="text/javascript"></script>
<script src="{{ url_for('static', filename='admin/layout2/scripts/layout.js') }}" type="text/javascript"></script>
<!-- END PAGE LEVEL SCRIPTS -->
<!-- TABLE PLUGINS -->
<script type="text/javascript" src="{{ url_for('static', filename='global/plugins/select2/select2.min.js') }}"></script>
<script type="text/javascript" src="{{ url_for('static', filename='global/plugins/datatables/media/js/jquery.dataTables.min.js') }}"></script>
<script type="text/javascript" src="{{ url_for('static', filename='global/plugins/datatables/plugins/bootstrap/dataTables.bootstrap.js') }}"></script>
<script src="{{ url_for('static', filename='admin/pages/scripts/table-managed.js') }}"></script>
<!-- END TABLE PLUGINS -->
<script>
jQuery(document).ready(function() {
Metronic.init(); // init metronic core componets
Layout.init(); // init layout
TableManaged.init(); // manage table columns
});
</script>
<!-- END JAVASCRIPTS -->
{% endblock %}

195
app/templates/domain.html Normal file
View File

@ -0,0 +1,195 @@
{% extends "base.html" %}
{% block head %}
{{ super() }}
<!-- BEGIN PAGE LEVEL PLUGIN STYLES -->
<link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='global/plugins/select2/select2.css') }}"/>
<link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='global/plugins/datatables/plugins/bootstrap/dataTables.bootstrap.css') }}"/>
<!-- END PAGE LEVEL PLUGIN STYLES -->
<!-- BEGIN THEME STYLES -->
<!-- DOC: To use 'rounded corners' style just load 'components-rounded.css' stylesheet instead of 'components.css' in the below style tag -->
<link href="{{ url_for('static', filename='global/css/components-md.css') }}" id="style_components" rel="stylesheet" type="text/css"/>
<link href="{{ url_for('static', filename='global/css/plugins-md.css') }}" rel="stylesheet" type="text/css"/>
<link href="{{ url_for('static', filename='admin/layout2/css/layout.css') }}" rel="stylesheet" type="text/css"/>
<link href="{{ url_for('static', filename='admin/layout2/css/themes/grey.css') }}" rel="stylesheet" type="text/css" id="style_color"/>
<link href="{{ url_for('static', filename='admin/layout2/css/custom.css') }}" rel="stylesheet" type="text/css"/>
<!-- END THEME STYLES -->
{% endblock %}
{% block title %}<title>DNS Control Panel - DOMAIN</title>{% endblock %}
{% block dashboard_stat %}
<!-- BEGIN PAGE HEADER-->
<h3 class="page-title">
Domain</h3>
<div class="page-bar">
<ul class="page-breadcrumb">
<li>
<i class="fa fa-home"></i>
<a href="/">Home</a>
<i class="fa fa-angle-right"></i>
</li>
<li>
<a href="{{ url_for('dashboard') }}">Domain</a>
<i class="fa fa-angle-right"></i>
</li>
<li>
<a href="">{{ domain.name }}</a>
</li>
</ul>
</div>
<!-- END PAGE HEADER-->
{% endblock %}
{% block content %}
<div class="clearfix">
</div>
<div class="row">
<div class="col-md-12">
<!-- BEGIN RECORD TABLE-->
<div class="portlet box blue">
<div class="portlet-title">
<div class="caption">
<i class="fa fa-globe"></i> {{ domain.name }}
<input type="hidden" id="domainname" value="{{ domain.name }}">
</div>
<div class="tools">
<a href="javascript:;" class="collapse">
</a>
<a href="javascript:;" class="reload">
</a>
</div>
</div>
<div class="portlet-body">
{% if domain.type != 'Slave' %}
<div class="table-toolbar">
<div class="row">
<div class="col-md-6">
<div class="btn-group">
<button id="tbl_record_manage_new" class="btn green">
Add Record <i class="fa fa-plus"></i>
</button>
</div>
</div>
<div class="col-md-6">
<div class="btn-group pull-right">
<button id="tbl_record_manage_apply" class="btn green">
<i class="fa fa-save"></i>Apply Changes
</button>
</div>
</div>
</div>
</div>
{% else %}
<div class="table-toolbar">
<div class="row">
<div class="col-md-6">
<div class="btn-group">
<button id="tbl_record_update_from_master" class="btn green">
Update from Master <i class="fa fa-download"></i>
</button>
</div>
</div>
</div>
</div>
{% endif %}
<table class="table table-striped table-hover table-bordered" id="tbl_record_manage">
<thead>
<tr>
<th>
Name
</th>
<th>
Type
</th>
<th>
Status
</th>
<th>
TTL
</th>
<th>
Data
</th>
<th>
Edit
</th>
<th>
Delete
</th>
</tr>
</thead>
<tbody>
{% for record in records %}
<tr class="odd gradeX">
<td>
{{ (record.name,domain.name)|display_record_name }}
</td>
<td>
{{ record.type }}
</td>
<td>
{{ record.status }}
</td>
<td>
{{ record.ttl }}
</td>
<td>
{{ record.data }}
</td>
{% if domain.type != 'Slave' %}
<td width="6%">
{% if record.is_allowed() %}
<a class="btn default btn-xs purple edit" href="javascript:;"> <i class="fa fa-edit"></i></a>
{% else %}
<a href="#" class="btn default btn-xs purple"> <i class="fa fa-exclamation-circle"></i></a>
{% endif %}
</td>
<td width="6%">
{% if record.is_allowed() %}
<a class="btn default btn-xs red delete" href="javascript:;"> <i class="fa fa-trash"></i></a>
{% else %}
<a href="#" class="btn default btn-xs red"> <i class="fa fa-exclamation-circle"></i></a>
{% endif %}
{% else %}
<td width="6%">
<a href="#" class="btn default btn-xs purple"> <i class="fa fa-exclamation-circle"></i></a>
</td>
<td width="6%">
<a href="#" class="btn default btn-xs purple"> <i class="fa fa-exclamation-circle"></i></a>
</td>
{% endif %}
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>
<!-- END RECORD TABLE-->
</div>
</div>
{% endblock %}
{% block scripts %}
{{ super() }}
<!-- BEGIN PAGE LEVEL SCRIPTS -->
<script src="{{ url_for('static', filename='global/scripts/metronic.js') }}" type="text/javascript"></script>
<script src="{{ url_for('static', filename='admin/layout2/scripts/layout.js') }}" type="text/javascript"></script>
<script src="{{ url_for('static', filename='global/plugins/bootbox/bootbox.min.js') }}" type="text/javascript"></script>
<!-- END PAGE LEVEL SCRIPTS -->
<!-- TABLE PLUGINS -->
<script type="text/javascript" src="{{ url_for('static', filename='global/plugins/select2/select2.min.js') }}"></script>
<script type="text/javascript" src="{{ url_for('static', filename='global/plugins/datatables/media/js/jquery.dataTables.min.js') }}"></script>
<script type="text/javascript" src="{{ url_for('static', filename='global/plugins/datatables/plugins/bootstrap/dataTables.bootstrap.js') }}"></script>
<script src="{{ url_for('static', filename='admin/pages/scripts/table-editable.js') }}"></script>
<!-- END TABLE PLUGINS -->
<script>
jQuery(document).ready(function() {
Metronic.init(); // init metronic core componets
Layout.init(); // init layout
TableEditable.init();
});
</script>
<!-- END JAVASCRIPTS -->
{% endblock %}

View File

@ -0,0 +1,143 @@
{% extends "base.html" %}
{% block head %}
{{ super() }}
<!-- BEGIN PAGE LEVEL PLUGIN STYLES -->
<link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='global/plugins/select2/select2.css') }}"/>
<link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='global/plugins/datatables/plugins/bootstrap/dataTables.bootstrap.css') }}"/>
<!-- END PAGE LEVEL PLUGIN STYLES -->
<!-- BEGIN THEME STYLES -->
<!-- DOC: To use 'rounded corners' style just load 'components-rounded.css' stylesheet instead of 'components.css' in the below style tag -->
<link href="{{ url_for('static', filename='global/css/components-md.css') }}" id="style_components" rel="stylesheet" type="text/css"/>
<link href="{{ url_for('static', filename='global/css/plugins-md.css') }}" rel="stylesheet" type="text/css"/>
<link href="{{ url_for('static', filename='admin/layout2/css/layout.css') }}" rel="stylesheet" type="text/css"/>
<link href="{{ url_for('static', filename='admin/layout2/css/themes/grey.css') }}" rel="stylesheet" type="text/css" id="style_color"/>
<link href="{{ url_for('static', filename='admin/layout2/css/custom.css') }}" rel="stylesheet" type="text/css"/>
<!-- END THEME STYLES -->
{% endblock %}
{% block title %}<title>DNS Control Panel - Add Domain</title>{% endblock %}
{% block dashboard_stat %}
<!-- BEGIN PAGE HEADER-->
<h3 class="page-title">
Add Domain</h3>
<div class="page-bar">
<ul class="page-breadcrumb">
<li>
<i class="fa fa-home"></i>
<a href="/">Home</a>
<i class="fa fa-angle-right"></i>
</li>
<li>
<a href="{{ url_for('dashboard') }}">Domain</a>
<i class="fa fa-angle-right"></i>
</li>
<li>
Add
</li>
</ul>
</div>
<!-- END PAGE HEADER-->
{% endblock %}
{% block content %}
<div class="clearfix">
</div>
<div class="row">
<div class="col-md-12">
<!-- BEGIN ADD RECORD FORM-->
<div class="portlet light">
<div class="portlet-title">
<div class="caption font-green-haze">
<i class="icon-settings font-green-haze"></i>
<span class="caption-subject bold uppercase"> New Zone Information</span>
</div>
<div class="actions">
<a class="btn btn-circle btn-icon-only btn-default fullscreen" href="javascript:;" data-original-title="" title="">
</a>
</div>
</div>
<div class="portlet-body form">
<form role="form" action="{{ url_for('domain_add') }}" method="post">
<div class="form-body">
<div class="form-group form-md-line-input form-md-floating-label has-success">
<input type="text" class="form-control" id="domain_name" name="domain_name">
<label for="domain_name">Enter a valid domain name (required)</label>
</div>
</div>
<div class="form-group form-md-radios">
<label>Type</label>
<div class="md-radio-inline">
<div class="md-radio">
<input type="radio" id="radio_type_native" name="radio_type" class="md-radiobtn" value="native" checked="" onclick="javascript:zoneTypeSelection();">
<label for="radio_type_native">
<span class="inc"></span>
<span class="check"></span>
<span class="box"></span>
Native</label>
</div>
<div class="md-radio has-error">
<input type="radio" id="radio_type_master" name="radio_type" class="md-radiobtn" value="master" onclick="javascript:zoneTypeSelection();">
<label for="radio_type_master">
<span class="inc"></span>
<span class="check"></span>
<span class="box"></span>
Master</label>
</div>
<div class="md-radio has-info">
<input type="radio" id="radio_type_slave" name="radio_type" class="md-radiobtn" value="slave" onclick="javascript:zoneTypeSelection();">
<label for="radio_type_slave">
<span class="inc"></span>
<span class="check"></span>
<span class="box"></span>
Slave</label>
</div>
</div>
<div class="form-body" id="form_master_ip" style="display:none">
<div class="form-group form-md-line-input form-md-floating-label has-success">
<input type="text" class="form-control" id="domain_master_address" name="domain_master_address">
<label for="domain_master_address">Enter valid master ip addresses (separated by commas)</label>
</div>
</div>
</div>
<div class="form-actions">
<div class="row">
<div class="col-md-offset-1">
<button type="submit" class="btn blue">Submit</button>
<button type="button" class="btn grey" onclick="window.location.href='{{ url_for('dashboard') }}'">Cancel</button>
</div>
</div>
</div>
</form>
</div>
</div>
</div>
<!-- END ADD RECORD FORM-->
</div>
{% endblock %}
{% block scripts %}
{{ super() }}
<!-- BEGIN PAGE LEVEL SCRIPTS -->
<script src="{{ url_for('static', filename='global/scripts/metronic.js') }}" type="text/javascript"></script>
<script src="{{ url_for('static', filename='admin/layout2/scripts/layout.js') }}" type="text/javascript"></script>
<!-- END PAGE LEVEL SCRIPTS -->
<script>
jQuery(document).ready(function() {
Metronic.init(); // init metronic core componets
Layout.init(); // init layout
});
</script>
<script type="text/javascript">
function zoneTypeSelection() {
if (document.getElementById('radio_type_slave').checked) {
document.getElementById('form_master_ip').style.display = 'block';
}
else document.getElementById('form_master_ip').style.display = 'none';
}
</script>
<!-- END JAVASCRIPTS -->
{% endblock %}

View File

@ -0,0 +1,145 @@
{% extends "base.html" %}
{% block head %}
{{ super() }}
<!-- BEGIN PAGE LEVEL STYLES -->
<link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='global/plugins/jquery-multi-select/css/multi-select.css') }}"/>
<!-- BEGIN THEME STYLES -->
<!-- BEGIN THEME STYLES -->
<!-- DOC: To use 'rounded corners' style just load 'components-rounded.css' stylesheet instead of 'components.css' in the below style tag -->
<link href="{{ url_for('static', filename='global/css/components-md.css') }}" id="style_components" rel="stylesheet" type="text/css"/>
<link href="{{ url_for('static', filename='global/css/plugins-md.css') }}" rel="stylesheet" type="text/css"/>
<link href="{{ url_for('static', filename='admin/layout2/css/layout.css') }}" rel="stylesheet" type="text/css"/>
<link href="{{ url_for('static', filename='admin/layout2/css/themes/grey.css') }}" rel="stylesheet" type="text/css" id="style_color"/>
<link href="{{ url_for('static', filename='admin/layout2/css/custom.css') }}" rel="stylesheet" type="text/css"/>
<!-- END THEME STYLES -->
{% endblock %}
{% block title %}<title>DNS Control Panel - Domain Management</title>{% endblock %}
{% block dashboard_stat %}
<!-- BEGIN PAGE HEADER-->
<h3 class="page-title">
Admin Console</h3>
<div class="page-bar">
<ul class="page-breadcrumb">
<li>
<i class="fa fa-home"></i>
<a href="/">Home</a>
<i class="fa fa-angle-right"></i>
</li>
<li>
<a href="{{ url_for('admin') }}">Admin Console</a>
<i class="fa fa-angle-right"></i>
</li>
<li>
<a href="#">Domain Management</a>
</li>
</ul>
</div>
<!-- END PAGE HEADER-->
{% endblock %}
{% block content %}
<div class="clearfix">
</div>
<div class="row">
<div class="col-md-12">
<!-- BEGIN ACCESS CONTROL -->
<div class="portlet box red-sunglo">
<div class="portlet-title">
<div class="caption">
<i class="fa fa-globe"></i>Domain Access Control
</div>
<div class="tools">
<a href="javascript:;" class="collapse">
</a>
</div>
</div>
<div class="portlet-body">
<form method="post" action="{{ url_for('domain_management', domain_name=domain.name) }}" class="form-horizontal form-row-seperated">
<div class="form-body">
<div class="form-group">
<label class="control-label col-md-3">Move users from left to right to grant them access to the domain <strong>{{ domain.name }}.</strong><br/><br/>
Users with <font color="red">red</font> color is in Administrator role, no need to grant permission.
</label>
<div class="col-md-9">
<select multiple="multiple" class="multi-select" id="domain_multi_user" name="domain_multi_user[]">
{% for user in users %}
<option {% if user.id in domain_user_ids %}selected{% endif %} value="{{ user.username }}" {% if user.role.name == 'Administrator' %}style="color:red"{% endif %}>{{ user.username}}
</option>
{% endfor %}
</select>
</div>
</div>
</div>
<div class="form-actions">
<div class="row">
<div class="col-md-offset-3 col-md-9">
<button type="submit" class="btn green"><i class="fa fa-check"></i> Save</button>
</div>
</div>
</div>
</form>
</div>
</div>
<!-- END ACCESS CONTROL -->
</div>
</div>
<div class="row">
<div class="col-md-12">
<!-- BEGIN DOMAIN DELETION -->
<div class="portlet box red-sunglo">
<div class="portlet-title">
<div class="caption">
<i class="fa fa-globe"></i>Domain Deletion
</div>
<div class="tools">
<a href="javascript:;" class="collapse">
</a>
</div>
</div>
<div class="portlet-body">
<p>This function is used to remove a domain completely from Database and PowerDNS. All records and user privileges which associated to this domain be removed also. Your change <font color="red">cannot be reverted</font>. Please be careful with your action!</p>
<div class="form-actions">
<div class="row">
<div class="col-md-offset-3 col-md-9">
<button type="button" class="btn red" id="delete_domain" value="{{ domain.name}}"><i class="fa fa-times"></i> DELETE DOMAIN {{ domain.name }}</button>
</div>
</div>
</div>
</div>
</div>
<!-- END DOMAIN DELETION -->
</div>
</div>
{% endblock %}
{% block scripts %}
{{ super() }}
<!-- BEGIN PAGE LEVEL PLUGINS -->
<script type="text/javascript" src="{{ url_for('static', filename='global/plugins/bootstrap-select/bootstrap-select.min.js') }}"></script>
<script type="text/javascript" src="{{ url_for('static', filename='global/plugins/select2/select2.min.js') }}"></script>
<script type="text/javascript" src="{{ url_for('static', filename='global/plugins/jquery-multi-select/js/jquery.multi-select.js') }}"></script>
<script src="{{ url_for('static', filename='global/plugins/bootbox/bootbox.min.js') }}" type="text/javascript"></script>
<!-- END PAGE LEVEL PLUGINS -->
<!-- BEGIN PAGE LEVEL SCRIPTS -->
<script src="{{ url_for('static', filename='global/scripts/metronic.js') }}" type="text/javascript"></script>
<script src="{{ url_for('static', filename='admin/layout2/scripts/layout.js') }}" type="text/javascript"></script>
<script src="{{ url_for('static', filename='admin/pages/scripts/components-dropdowns.js') }}" type="text/javascript"></script>
<script src="{{ url_for('static', filename='admin/pages/scripts/my-button-action.js') }}" type="text/javascript"></script>
<!-- END PAGE LEVEL SCRIPTS -->
<script>
jQuery(document).ready(function() {
Metronic.init(); // init metronic core componets
Layout.init(); // init layout
ComponentsDropdowns.init();
MyButtonAction.init();
});
</script>
<!-- END JAVASCRIPTS -->
{% endblock %}

189
app/templates/login.html Normal file
View File

@ -0,0 +1,189 @@
<!DOCTYPE html>
<!--[if IE 8]> <html lang="en" class="ie8 no-js"> <![endif]-->
<!--[if IE 9]> <html lang="en" class="ie9 no-js"> <![endif]-->
<!--[if !IE]><!-->
<html lang="en">
<!--<![endif]-->
<!-- BEGIN HEAD -->
<head>
<meta charset="utf-8"/>
<title>DNS Management System | Login</title>
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta content="width=device-width, initial-scale=1.0" name="viewport"/>
<meta http-equiv="Content-type" content="text/html; charset=utf-8">
<meta content="" name="description"/>
<meta content="" name="author"/>
<!-- BEGIN GLOBAL MANDATORY STYLES -->
<link href="http://fonts.googleapis.com/css?family=Open+Sans:400,300,600,700&subset=all" rel="stylesheet" type="text/css"/>
<link href="{{ url_for('static', filename='global/plugins/font-awesome/css/font-awesome.min.css') }}" rel="stylesheet" type="text/css"/>
<link href="{{ url_for('static', filename='global/plugins/simple-line-icons/simple-line-icons.min.css') }}" rel="stylesheet" type="text/css"/>
<link href="{{ url_for('static', filename='global/plugins/bootstrap/css/bootstrap.min.css') }}" rel="stylesheet" type="text/css"/>
<link href="{{ url_for('static', filename='global/plugins/uniform/css/uniform.default.css') }}" rel="stylesheet" type="text/css"/>
<!-- END GLOBAL MANDATORY STYLES -->
<!-- BEGIN PAGE LEVEL STYLES -->
<link href="{{ url_for('static', filename='admin/pages/css/login.css') }}" rel="stylesheet" type="text/css"/>
<!-- END PAGE LEVEL SCRIPTS -->
<!-- BEGIN THEME STYLES -->
<link href="{{ url_for('static', filename='global/css/components-md.css') }}" id="style_components" rel="stylesheet" type="text/css"/>
<link href="{{ url_for('static', filename='global/css/plugins-md.css') }}" rel="stylesheet" type="text/css"/>
<link href="{{ url_for('static', filename='admin/layout/css/layout.css') }}" rel="stylesheet" type="text/css"/>
<link href="{{ url_for('static', filename='admin/layout/css/themes/default.css') }}" rel="stylesheet" type="text/css" id="style_color"/>
<link href="{{ url_for('static', filename='admin/layout/css/custom.css') }}" rel="stylesheet" type="text/css"/>
<!-- END THEME STYLES -->
<link rel="shortcut icon" href="favicon.ico"/>
</head>
<!-- END HEAD -->
<!-- BEGIN BODY -->
<body class="page-md login">
<!-- BEGIN SIDEBAR TOGGLER BUTTON -->
<div class="menu-toggler sidebar-toggler">
</div>
<!-- END SIDEBAR TOGGLER BUTTON -->
<!-- BEGIN LOGO -->
<div class="logo">
<a href="#">
<img src="{{ url_for('static', filename='global/img/be-logo.png') }}" width="15%" height="15%">
</a>
</div>
<!-- END LOGO -->
<!-- BEGIN LOGIN -->
<div class="content">
<!-- BEGIN LOGIN FORM -->
<form class="login-form" action="" method="post">
<h3 class="form-title">Sign In</h3>
{% if error %}
<div class="alert alert-danger">
<button class="close" data-close="alert"></button>
<span>
{{ error }} </span>
</div>
{% endif %}
<div class="alert alert-danger display-hide">
<button class="close" data-close="alert"></button>
<span>
Enter any username and password. </span>
</div>
<div class="form-group">
<!--ie8, ie9 does not support html5 placeholder, so we just show field title for that-->
<label class="control-label visible-ie8 visible-ie9">Username</label>
<input class="form-control form-control-solid placeholder-no-fix" type="text" autocomplete="off" placeholder="Username" name="username" value="{{ request.form.username }}"/>
</div>
<div class="form-group">
<label class="control-label visible-ie8 visible-ie9">Password</label>
<input class="form-control form-control-solid placeholder-no-fix" type="password" autocomplete="off" placeholder="Password" name="password" value="{{ request.form.password }}"/>
</div>
<div class="form-actions">
<button type="submit" class="btn btn-success uppercase">Login</button>
<label class="rememberme check">
<input type="checkbox" name="remember" value="1"/>Remember </label>
<a href="javascript:;" id="forget-password" class="forget-password">Forgot Password?</a>
</div>
<div class="create-account">
<p>
<a href="javascript:;" id="register-btn" class="uppercase">Create an account</a>
</p>
</div>
</form>
<!-- END LOGIN FORM -->
<!-- BEGIN FORGOT PASSWORD FORM -->
<form class="forget-form" action="index.html" method="post">
<h3>Forget Password ?</h3>
<p>
Enter your e-mail address below to reset your password.
</p>
<div class="form-group">
<input class="form-control placeholder-no-fix" type="text" autocomplete="off" placeholder="Email" name="email"/>
</div>
<div class="form-actions">
<button type="button" id="back-btn" class="btn btn-default">Back</button>
<button type="submit" class="btn btn-success uppercase pull-right">Submit</button>
</div>
</form>
<!-- END FORGOT PASSWORD FORM -->
<!-- BEGIN REGISTRATION FORM -->
<form class="register-form" action="" method="post">
<h3>Sign Up</h3>
<p class="hint">
Enter your personal details below:
</p>
<div class="form-group">
<label class="control-label visible-ie8 visible-ie9">First Name</label>
<input class="form-control placeholder-no-fix" type="text" placeholder="First Name" name="firstname"/>
</div>
<div class="form-group">
<label class="control-label visible-ie8 visible-ie9">Last Name</label>
<input class="form-control placeholder-no-fix" type="text" placeholder="Last Name" name="lastname"/>
</div>
<div class="form-group">
<!--ie8, ie9 does not support html5 placeholder, so we just show field title for that-->
<label class="control-label visible-ie8 visible-ie9">Email</label>
<input class="form-control placeholder-no-fix" type="text" placeholder="Email" name="email"/>
</div>
<p class="hint">
Enter your account details below:
</p>
<div class="form-group">
<label class="control-label visible-ie8 visible-ie9">Username</label>
<input class="form-control placeholder-no-fix" type="text" autocomplete="off" placeholder="Username" name="username"/>
</div>
<div class="form-group">
<label class="control-label visible-ie8 visible-ie9">Password</label>
<input class="form-control placeholder-no-fix" type="password" autocomplete="off" id="register_password" placeholder="Password" name="password"/>
</div>
<div class="form-group">
<label class="control-label visible-ie8 visible-ie9">Re-type Your Password</label>
<input class="form-control placeholder-no-fix" type="password" autocomplete="off" placeholder="Re-type Your Password" name="rpassword"/>
</div>
<div class="form-group margin-top-20 margin-bottom-20">
<label class="check">
<input type="checkbox" name="tnc"/> I agree to the <a href="javascript:;">
Terms of Service </a>
& <a href="javascript:;">
Privacy Policy </a>
</label>
<div id="register_tnc_error">
</div>
</div>
<div class="form-actions">
<button type="button" id="register-back-btn" class="btn btn-default">Back</button>
<button type="submit" id="register-submit-btn" class="btn btn-success uppercase pull-right">Submit</button>
</div>
</form>
<!-- END REGISTRATION FORM -->
</div>
<div class="copyright">
2015 © Khanh Ngo
</div>
<!-- END LOGIN -->
<!-- BEGIN JAVASCRIPTS(Load javascripts at bottom, this will reduce page load time) -->
<!-- BEGIN CORE PLUGINS -->
<!--[if lt IE 9]>
<script src="{{ url_for('static', filename='global/plugins/respond.min.js') }}"></script>
<script src="{{ url_for('static', filename='global/plugins/excanvas.min.js') }}"></script>
<![endif]-->
<script src="{{ url_for('static', filename='global/plugins/jquery.min.js') }}" type="text/javascript"></script>
<script src="{{ url_for('static', filename='global/plugins/jquery-migrate.min.js') }}" type="text/javascript"></script>
<script src="{{ url_for('static', filename='global/plugins/bootstrap/js/bootstrap.min.js') }}" type="text/javascript"></script>
<script src="{{ url_for('static', filename='global/plugins/jquery.blockui.min.js') }}" type="text/javascript"></script>
<script src="{{ url_for('static', filename='global/plugins/uniform/jquery.uniform.min.js') }}" type="text/javascript"></script>
<script src="{{ url_for('static', filename='global/plugins/jquery.cokie.min.js') }}" type="text/javascript"></script>
<!-- END CORE PLUGINS -->
<!-- BEGIN PAGE LEVEL PLUGINS -->
<script src="{{ url_for('static', filename='global/plugins/jquery-validation/js/jquery.validate.min.js') }}" type="text/javascript"></script>
<!-- END PAGE LEVEL PLUGINS -->
<!-- BEGIN PAGE LEVEL SCRIPTS -->
<script src="{{ url_for('static', filename='global/scripts/metronic.js') }}" type="text/javascript"></script>
<script src="{{ url_for('static', filename='admin/layout/scripts/layout.js') }}" type="text/javascript"></script>
<script src="{{ url_for('static', filename='admin/pages/scripts/login.js') }}" type="text/javascript"></script>
<!-- END PAGE LEVEL SCRIPTS -->
<script>
jQuery(document).ready(function() {
Metronic.init(); // init metronic core components
Layout.init(); // init current layout
Login.init();
});
</script>
<!-- END JAVASCRIPTS -->
</body>
<!-- END BODY -->
</html>

View File

@ -0,0 +1,18 @@
<!doctype html>
<title>Site Maintenance</title>
<style>
body { text-align: center; padding: 150px; }
h1 { font-size: 50px; }
body { font: 20px Helvetica, sans-serif; color: #333; }
article { display: block; text-align: left; width: 650px; margin: 0 auto; }
a { color: #dc8100; text-decoration: none; }
a:hover { color: #333; text-decoration: none; }
</style>
<article>
<h1>We&rsquo;ll be back soon!</h1>
<div>
<p>Sorry for the inconvenience but we&rsquo;re performing some maintenance at the moment. If you need to you can always <a href="mailto:ngokhanhit@gmail.com">contact us</a>, otherwise we&rsquo;ll be back online shortly!</p>
<p>&mdash; Team</p>
</div>
</article>