Skip to content

Commit

Permalink
Added separate admin interface
Browse files Browse the repository at this point in the history
  • Loading branch information
viklund committed Oct 18, 2016
1 parent 0e63fb7 commit fd75202
Show file tree
Hide file tree
Showing 6 changed files with 134 additions and 107 deletions.
7 changes: 6 additions & 1 deletion tornado/application.py
Original file line number Diff line number Diff line change
Expand Up @@ -150,15 +150,20 @@ class home(auth.UnsafeHandler):
def get(self, *args, **kwargs):
t = template.Template(applicationTemplate.indexHead)
self.write(t.generate())

is_admin = False

if self.get_current_token() != None:
t = template.Template(applicationTemplate.indexHtml)
is_admin = self.is_admin()
elif self.get_current_user() != None:
t = template.Template(applicationTemplate.indexNoAccess)
else:
t = template.Template(applicationTemplate.notAuthorizedHtml)
logging.info(self.get_current_user())

self.write(t.generate(user_name=self.get_current_user(),
email=self.get_current_email(),
is_admin=is_admin,
ExAC=secrets.ExAC_server))

class getUser(auth.UnsafeHandler):
Expand Down
6 changes: 5 additions & 1 deletion tornado/applicationTemplate.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,11 @@
class="btn btn-default">ExAC Browser</a>
<a href="/#/downloadData/"
role="button"
class="btn btn-default">Download Data</a>&#160; &#160;
class="btn btn-default">Download Data</a>
{%if is_admin %}
<a href="/#/admin/"
role="button"
class="btn btn-default">Admin</a>{% end %}&#160; &#160;
<div class="btn-group navbar-btn">{%if user_name != None%}
{{user_name}}
<a href="/logout">Logout</a>
Expand Down
7 changes: 7 additions & 0 deletions tornado/auth.py
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,13 @@ def get_current_user_name(self):
return user
return user

def is_admin(self):
email = self.get_current_email()
tRes = db.query("""select full_user from swefreq.users where
email='%s' and swefreq_admin='YES'""" % email)
lAdmin = True if len(tRes) == 1 else False
return lAdmin

def write_error(self, status_code, **kwargs):
""" Overwrites write_error method to have custom error pages.
http://tornado.readthedocs.org/en/latest/web.html#tornado.web.RequestHandler.write_error
Expand Down
6 changes: 5 additions & 1 deletion tornado/javascript/app.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@

/////////////////////////////////////////////////////////////////////////////////////

App.controller('sweFreqController', function($http, $scope) {
App.controller('adminController', function($http, $scope) {
var localThis = this;
this.userName = '';
this.email = '';
Expand Down Expand Up @@ -200,6 +200,10 @@
.when('/privacyPolicy/', {
templateUrl : 'static/privacyPolicy.html'
})
// Admin interface
.when('/admin/', {
templateUrl : 'static/admin.html'
})
});
})();

110 changes: 110 additions & 0 deletions tornado/static/admin.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
<!-- home.html -->
<div ng-controller="adminController as adminCtrl">
<br />
<br />
<div class="col-xs-2"></div>
<div ng-if="adminCtrl.data.admin == false">
<p>You need to be logged in as an admin to use this page.
</div>
<div ng-if="adminCtrl.data.admin == true">
<div class="col-xs-1"></div>
<div class="col-xs-10">
<div id="exTab2"
class="container">
<ul class="nav nav-tabs">
<li class="active">
<a data-target="#requestList"
data-toggle="tab">Pending requests</a>
</li>
<li>
<a data-target="#allUsers"
data-toggle="tab">Approved users</a>
</li>
<li>
<a data-target="#emailList"
data-toggle="tab">Email-list</a>
</li>
</ul>
<div class="tab-content">
<div class="tab-pane active"
id="requestList">
<div class="col-xs-12">
<br />
<br />
<div class="row">
<label class="col-md-3">Name</label>
<label class="col-md-3">E-mail</label>
<label class="col-md-2">Affiliation</label>
<label class="col-md-2">Country</label>
<label class="col-md-2">Applied date</label>
</div>
<div ng-repeat="row in adminCtrl.data.requests"
ng-class-odd="'odd'"
ng-class-even="'even'">
<div class="row top-buffer">
<div class="col-md-3">
<div class="btn btn-primary btn-xs"
data-toggle="tooltip"
title="Give the user access"
ng-click="adminCtrl.approvedUser(row)">Approve</div>
<div class="btn btn-danger btn-xs"
data-toggle="tooltip"
title="Delete from the database"
ng-click="adminCtrl.denyUser(row)">
Delete</div>{{row.user}}</div>
<div class="col-md-3 alignment">{{row.email}}</div>
<div class="col-md-2 alignment">{{row.affiliation}}</div>
<div class="col-md-2 alignment">{{row.country}}</div>
<div class="col-md-2 alignment">{{row.applyDate}}</div>
</div>
</div>
</div>
</div>
<div class="tab-pane"
id="allUsers">
<div class="col-xs-12">
<br />
<br />
<div class="row">
<label class="col-md-3">Name</label>
<label class="col-md-3">E-mail</label>
<label class="col-md-2">Affiliation</label>
<label class="col-md-2">Country</label>
<label class="col-md-2">Download count</label>
</div>
<div ng-repeat="row in adminCtrl.data.approvedUsers"
ng-class-odd="'odd'"
ng-class-even="'even'">
<div class="row top-buffer">
<div class="col-md-3">
<div class="btn btn-danger btn-xs"
data-toggle="tooltip"
title="Make the user pending again"
ng-click="adminCtrl.deleteUser(row)">
Revoke</div>{{row.user}}</div>
<div class="col-md-3 alignment">{{row.email}}</div>
<div class="col-md-2 alignment">{{row.affiliation}}</div>
<div class="col-md-2 alignment">{{row.country}}</div>
<div class="col-md-2 alignment">{{row.downloadCount}}</div>
</div>
</div>
</div>
</div>
<div class="tab-pane"
id="emailList">
<br />
<div class="row">
<div class="col-xs-1"></div>
<div class="col-xs-10">
<span ng-repeat="email in adminCtrl.data.emails">
{{email}}{{$last ? '' : ', '}}
</span>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="row"></div>
</div>
105 changes: 1 addition & 104 deletions tornado/static/home.html
Original file line number Diff line number Diff line change
@@ -1,15 +1,13 @@
<!-- home.html -->
<div ng-controller="sweFreqController as sweFreqCtrl">
<div>
<br />
<br />
<div class="col-xs-2"></div>
<div ng-if="sweFreqCtrl.data.admin == false">
<div class="jumbotron">
<div class="container">
<img src="/javascript/swegen_logo_v1_trans_400.png"
class="big-swegen-logo" />
<h2>SweGen Variant Frequency Database</h2>
<div ng-if="sweFreqCtrl.data.trusted == false">
<p>This server hosts whole-genome variant frequencies for 1000
Swedish individuals generated within the SweGen project. The
frequency data is intended to be used as a resource for the research
Expand All @@ -24,7 +22,6 @@ <h2>SweGen Variant Frequency Database</h2>
or causative of, disease.</p>
<p>We request that any use of data from the SweGen project cite this
preprint on bioRxiv.</p>
</div>
</div>
</div>

Expand All @@ -36,105 +33,5 @@ <h2>SweGen Variant Frequency Database</h2>
</div>

</div>
<div ng-if="sweFreqCtrl.data.admin == true">
<div class="col-xs-1"></div>
<div class="col-xs-10">
<div id="exTab2"
class="container">
<ul class="nav nav-tabs">
<li class="active">
<a data-target="#requestList"
data-toggle="tab">Pending requests</a>
</li>
<li>
<a data-target="#allUsers"
data-toggle="tab">Approved users</a>
</li>
<li>
<a data-target="#emailList"
data-toggle="tab">Email-list</a>
</li>
</ul>
<div class="tab-content">
<div class="tab-pane active"
id="requestList">
<div class="col-xs-12">
<br />
<br />
<div class="row">
<label class="col-md-3">Name</label>
<label class="col-md-3">E-mail</label>
<label class="col-md-2">Affiliation</label>
<label class="col-md-2">Country</label>
<label class="col-md-2">Applied date</label>
</div>
<div ng-repeat="row in sweFreqCtrl.data.requests"
ng-class-odd="'odd'"
ng-class-even="'even'">
<div class="row top-buffer">
<div class="col-md-3">
<div class="btn btn-primary btn-xs"
data-toggle="tooltip"
title="Give the user access"
ng-click="sweFreqCtrl.approvedUser(row)">Approve</div>
<div class="btn btn-danger btn-xs"
data-toggle="tooltip"
title="Delete from the database"
ng-click="sweFreqCtrl.denyUser(row)">
Delete</div>{{row.user}}</div>
<div class="col-md-3 alignment">{{row.email}}</div>
<div class="col-md-2 alignment">{{row.affiliation}}</div>
<div class="col-md-2 alignment">{{row.country}}</div>
<div class="col-md-2 alignment">{{row.applyDate}}</div>
</div>
</div>
</div>
</div>
<div class="tab-pane"
id="allUsers">
<div class="col-xs-12">
<br />
<br />
<div class="row">
<label class="col-md-3">Name</label>
<label class="col-md-3">E-mail</label>
<label class="col-md-2">Affiliation</label>
<label class="col-md-2">Country</label>
<label class="col-md-2">Download count</label>
</div>
<div ng-repeat="row in sweFreqCtrl.data.approvedUsers"
ng-class-odd="'odd'"
ng-class-even="'even'">
<div class="row top-buffer">
<div class="col-md-3">
<div class="btn btn-danger btn-xs"
data-toggle="tooltip"
title="Make the user pending again"
ng-click="sweFreqCtrl.deleteUser(row)">
Revoke</div>{{row.user}}</div>
<div class="col-md-3 alignment">{{row.email}}</div>
<div class="col-md-2 alignment">{{row.affiliation}}</div>
<div class="col-md-2 alignment">{{row.country}}</div>
<div class="col-md-2 alignment">{{row.downloadCount}}</div>
</div>
</div>
</div>
</div>
<div class="tab-pane"
id="emailList">
<br />
<div class="row">
<div class="col-xs-1"></div>
<div class="col-xs-10">
<span ng-repeat="email in sweFreqCtrl.data.emails">
{{email}}{{$last ? '' : ', '}}
</span>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="row"></div>
</div>

0 comments on commit fd75202

Please sign in to comment.