This is an automated email from the ASF dual-hosted git repository. smarru pushed a commit to branch develop in repository https://gitbox.apache.org/repos/asf/airavata-custos-portal.git
commit a91fe19ca51bd6a524f0e93f5ff3cca51937fd39 Author: Shivam Rastogi <[email protected]> AuthorDate: Thu Mar 12 00:34:24 2020 -0400 Added edit screens for the admin --- .../custos_admin_portal/apps/admin/urls.py | 3 +- .../custos_admin_portal/apps/admin/views.py | 14 +++- .../static/common/dist/webpack-stats.json | 2 +- .../EditTenantRequest.vue} | 36 +++++----- .../ListTenantRequestsContainer.vue | 83 ++++++++++++++++++++++ .../ViewTenantRequestContainer.vue | 75 ++++++++++++++++++- ...quest.js => entry-admin-edit-tenant-request.js} | 9 ++- .../entry-admin-list-new-tenant-requests.js | 25 +++++++ ...quest.js => entry-admin-view-tenant-request.js} | 2 +- .../apps/custos_admin_portal_admin/utils/urls.js | 17 ++++- .../apps/workspace/RequestNewTenantContainer.vue | 9 ++- .../apps/workspace/ViewTenantRequestContainer.vue | 29 ++++++++ .../static/common/vue.config.js | 4 +- .../custos_admin_portal/templates/base.html | 2 +- .../templates/custos_admin_portal/home.html | 2 - 15 files changed, 275 insertions(+), 37 deletions(-) diff --git a/custos_admin_portal/custos_admin_portal/apps/admin/urls.py b/custos_admin_portal/custos_admin_portal/apps/admin/urls.py index c8fcdc2..dd0828d 100644 --- a/custos_admin_portal/custos_admin_portal/apps/admin/urls.py +++ b/custos_admin_portal/custos_admin_portal/apps/admin/urls.py @@ -6,5 +6,6 @@ from . import views app_name = 'custos_admin_portal_admin' urlpatterns = [ url(r'^list-requests', views.list_new_tenant_requests, name='list_request'), - url(r'request/(?P<tenant_request_id>[^/]+)/$', views.view_tenant_request, name="view_tenant_request") + url(r'^request/(?P<tenant_request_id>[^/]+)/$', views.view_tenant_request, name="view_tenant_request"), + url(r'^edit-tenant-request/(?P<tenant_request_id>[^/]+)/$', views.edit_tenant_request, name="edit_tenant_request") ] diff --git a/custos_admin_portal/custos_admin_portal/apps/admin/views.py b/custos_admin_portal/custos_admin_portal/apps/admin/views.py index 42ecb83..4b4428f 100644 --- a/custos_admin_portal/custos_admin_portal/apps/admin/views.py +++ b/custos_admin_portal/custos_admin_portal/apps/admin/views.py @@ -5,13 +5,21 @@ def list_new_tenant_requests(request): print("New tenant requests list is called") # TODO fetch all the tenant requests from airavata here. return render(request, 'workspace/list_requests.html', { - 'bundle_name': 'list-requests', + 'bundle_name': 'admin-list-requests', }) def view_tenant_request(request, tenant_request_id): - print("Admin Tenant request Id: {}".format(tenant_request_id)), + print("Admin view Tenant request Id: {}".format(tenant_request_id)), return render(request, 'workspace/view_tenant_request.html', { - 'bundle_name': 'view-request', + 'bundle_name': 'admin-view-request', + 'tenant_request_id': tenant_request_id + }) + + +def edit_tenant_request(request, tenant_request_id): + print("Edit Tenant request Id: {}".format(tenant_request_id)), + return render(request, 'workspace/view_tenant_request.html', { + 'bundle_name': 'admin-edit-request', 'tenant_request_id': tenant_request_id }) diff --git a/custos_admin_portal/custos_admin_portal/static/common/dist/webpack-stats.json b/custos_admin_portal/custos_admin_portal/static/common/dist/webpack-stats.json index 1af4990..4e733dd 100644 --- a/custos_admin_portal/custos_admin_portal/static/common/dist/webpack-stats.json +++ b/custos_admin_portal/custos_admin_portal/static/common/dist/webpack-stats.json @@ -1 +1 @@ -{"status":"done","publicPath":"http://localhost:9000/static/common/dist/","chunks":{"app":[{"name":"app.js","publicPath":"http://localhost:9000/static/common/dist/app.js","path":"/home/shivam/Programming/custos_UI/custos_admin_portal/custos_admin_portal/static/common/dist/app.js"},{"name":"app.js.map","publicPath":"http://localhost:9000/static/common/dist/app.js.map","path":"/home/shivam/Programming/custos_UI/custos_admin_portal/custos_admin_portal/static/common/dist/app.js.map"}],"chunk [...] \ No newline at end of file +{"status":"done","publicPath":"http://localhost:9000/static/common/dist/","chunks":{"admin-edit-request":[{"name":"admin-edit-request.js","publicPath":"http://localhost:9000/static/common/dist/admin-edit-request.js","path":"/home/shivam/Programming/custos_UI/custos_admin_portal/custos_admin_portal/static/common/dist/admin-edit-request.js"},{"name":"admin-edit-request.e3e36cbf5bfd0814904f.hot-update.js","publicPath":"http://localhost:9000/static/common/dist/admin-edit-request.e3e36cbf5bfd [...] \ No newline at end of file diff --git a/custos_admin_portal/custos_admin_portal/static/common/js/apps/workspace/RequestNewTenantContainer.vue b/custos_admin_portal/custos_admin_portal/static/common/js/apps/custos_admin_portal_admin/EditTenantRequest.vue similarity index 93% copy from custos_admin_portal/custos_admin_portal/static/common/js/apps/workspace/RequestNewTenantContainer.vue copy to custos_admin_portal/custos_admin_portal/static/common/js/apps/custos_admin_portal_admin/EditTenantRequest.vue index 9d833f6..511b4b8 100755 --- a/custos_admin_portal/custos_admin_portal/static/common/js/apps/workspace/RequestNewTenantContainer.vue +++ b/custos_admin_portal/custos_admin_portal/static/common/js/apps/custos_admin_portal_admin/EditTenantRequest.vue @@ -2,7 +2,7 @@ <div> <div class="row"> <div class="col"> - <h1 class="h4 mb-4">New Tenant Request Form</h1> + <h1 class="h4 mb-4">Update Tenant Request Form</h1> </div> </div> <div> @@ -272,7 +272,9 @@ </b-form-group> - <b-button type="submit" variant="primary">Submit</b-button> + <b-button type="submit" variant="primary">Update</b-button> + <b-button type="submit" variant="">Discard</b-button> + </b-form> @@ -282,6 +284,7 @@ <script> import {email, required, url, minLength} from "vuelidate/lib/validators"; + import urls from "./utils/urls"; export default { computed: { @@ -298,22 +301,23 @@ data() { return { form: { - client_name: "", - requester_email: "", - admin_username: "", - admin_first_name: "", - admin_last_name: "", - admin_email: "", + request_id: "234234324", + client_name: "Test Client", + requester_email: "[email protected]", + admin_username: "airavata_admin", + admin_first_name: "Shivam", + admin_last_name: "Rastogi", + admin_email: "[email protected]", admin_password: "", - primary_contact: "", - secondary_contact: "", - redirect_uris: [""], - scope: [], - domain: "", - client_uri: "", - logo_uri: "", + primary_contact: "51651", + secondary_contact: "5545", + redirect_uris: ["http://tst.com"], + scope: ["openid"], + domain: "google.com", + client_uri: "http://tst.com", + logo_uri: "http://tst.com", application_type: "web", - comment: "" + comment: "Testing the page" }, scopeOptions: [ {text: "openId", value: "openid"}, diff --git a/custos_admin_portal/custos_admin_portal/static/common/js/apps/custos_admin_portal_admin/ListTenantRequestsContainer.vue b/custos_admin_portal/custos_admin_portal/static/common/js/apps/custos_admin_portal_admin/ListTenantRequestsContainer.vue new file mode 100644 index 0000000..8bd2add --- /dev/null +++ b/custos_admin_portal/custos_admin_portal/static/common/js/apps/custos_admin_portal_admin/ListTenantRequestsContainer.vue @@ -0,0 +1,83 @@ +<template> + <div> + <div class="row"> + <div class="col"> + <h1 class="h4 mb-4">Existing Tenants Request</h1> + </div> + </div> + <div class="row"> + <div class="col"> + <div class="card"> + <div class="card-body"> + <table class="table table-hover"> + <thead> + <tr> + <th>Request Id</th> + <th>Client Name</th> + <th>Creation Time</th> + <th>Status</th> + </tr> + </thead> + <tbody> + <tr + v-for="tR in tenantRequests" + :key="tR.requestId" + > + <td> + <b-link @click="viewLink(tR)">{{tR.requestId}}</b-link> + </td> + <td>{{tR.clientName}}</td> + <td> + <span>{{ tR.creationTime }}</span> + </td> + <td> + {{tR.status}} + </td> + </tr> + </tbody> + </table> + </div> + </div> + </div> + </div> + </div> +</template> + +<script> + + + import {now} from "moment"; + import urls from "./utils/urls"; + + export default { + + data() { + return { + tenantRequests: [] + } + }, + beforeMount() { + this.tenantRequests.push({ + requestId: '234234324', + clientName: 'scigap', + creationTime: now(), + status: 'Active' + }); + this.tenantRequests.push({ + requestId: '54645645', + clientName: 'scigap', + creationTime: now(), + status: 'Active' + }) + }, + methods: { + viewLink(tenantRequest) { + console.log("Executed view link",tenantRequest) + return urls.navigateToAdminViewRequest(tenantRequest) + } + } + }; +</script> + +<style> +</style> diff --git a/custos_admin_portal/custos_admin_portal/static/common/js/apps/custos_admin_portal_admin/ViewTenantRequestContainer.vue b/custos_admin_portal/custos_admin_portal/static/common/js/apps/custos_admin_portal_admin/ViewTenantRequestContainer.vue index 4c9a5c9..f414cd6 100644 --- a/custos_admin_portal/custos_admin_portal/static/common/js/apps/custos_admin_portal_admin/ViewTenantRequestContainer.vue +++ b/custos_admin_portal/custos_admin_portal/static/common/js/apps/custos_admin_portal_admin/ViewTenantRequestContainer.vue @@ -35,10 +35,72 @@ <th scope="row">Admin Name</th> <td>{{request.admin_first_name}} {{ " " }} {{request.admin_last_name}}</td> </tr> + <tr> + <th scope="row">Primary contact</th> + <td>{{request.primary_contact}}</td> + </tr> + <tr> + <th scope="row">Secondary contact</th> + <td>{{request.secondary_contact}}</td> + </tr> + <tr> + <th scope="row">Redirect URI Name</th> + <td>{{request.redirect_uris}}</td> + </tr> + <tr> + <th scope="row">Scope</th> + <td>{{request.scope}}</td> + </tr> + <tr> + <th scope="row">Domain</th> + <td>{{request.domain}}</td> + </tr> + <tr> + <th scope="row">Client URI</th> + <td>{{request.client_uri}}</td> + </tr> + <tr> + <th scope="row">Comment</th> + <td>{{request.comment}}</td> + </tr> + <div class="row"> + <div + id="col-exp-buttons" + class="col" + > + <b-button + v-b-modal.modal-1 + variant="success" + > + <div> + <b-modal id="modal-1" title="Info"> + <p class="my-4">Tenant is approved and credentials are activated</p> + </b-modal> + </div> + Approve + </b-button> + <b-button + @click="editExperiment" + variant="primary" + > + Edit + </b-button> + <b-button + v-b-modal.modal-2 + variant="danger" + > + Reject + <div> + <b-modal id="modal-2" title="Info"> + <p class="my-4">Tenant is rejected</p> + </b-modal> + </div> + </b-button> + </div> + </div> - </tbody> - <b-button type="submit" variant="primary">Submit</b-button> + </tbody> </table> </div> </div> @@ -48,6 +110,8 @@ </template> <script> + import urls from "./utils/urls"; + export default { props: { tenantRequestId: { @@ -57,6 +121,7 @@ data() { return { request: { + request_id: "xder3545d", client_name: "Test Client", requester_email: "[email protected]", admin_username: "airavata_admin", @@ -74,6 +139,12 @@ comment: "Testing the page" } } + }, + methods: { + editExperiment(tenantRequest) { + console.log("Executed edit link"); + return urls.navigateToAdminEditRequest(this.request) + } } } </script> \ No newline at end of file diff --git a/custos_admin_portal/custos_admin_portal/static/common/js/apps/custos_admin_portal_admin/entry-view-tenant-request.js b/custos_admin_portal/custos_admin_portal/static/common/js/apps/custos_admin_portal_admin/entry-admin-edit-tenant-request.js old mode 100644 new mode 100755 similarity index 72% copy from custos_admin_portal/custos_admin_portal/static/common/js/apps/custos_admin_portal_admin/entry-view-tenant-request.js copy to custos_admin_portal/custos_admin_portal/static/common/js/apps/custos_admin_portal_admin/entry-admin-edit-tenant-request.js index 3aab6cb..4d8f496 --- a/custos_admin_portal/custos_admin_portal/static/common/js/apps/custos_admin_portal_admin/entry-view-tenant-request.js +++ b/custos_admin_portal/custos_admin_portal/static/common/js/apps/custos_admin_portal_admin/entry-admin-edit-tenant-request.js @@ -1,6 +1,6 @@ import { entry } from "../../index"; -import ViewTenantRequestContainer from "./ViewTenantRequestContainer"; import MainLayout from "../../components/MainLayout"; +import EditTenantRequest from "./EditTenantRequest"; // Expect a template with id "edit-experiment" and experiment-id data attribute // @@ -10,7 +10,7 @@ entry(Vue => { new Vue({ render(h) { return h(MainLayout, [ - h(ViewTenantRequestContainer, { + h(EditTenantRequest, { props: { tenantRequestId: this.tenantRequestId } @@ -24,8 +24,7 @@ entry(Vue => { }, beforeMount() { this.tenantRequestId = JSON.parse(this.$el.dataset.tenantRequestId); - console.log("Entry is executed"); - console.log(this.$el.dataset) + console.log("Entry for admin edit tenant request is executed") } - }).$mount("#admin-view-request"); + }).$mount("#admin-edit-request"); }); diff --git a/custos_admin_portal/custos_admin_portal/static/common/js/apps/custos_admin_portal_admin/entry-admin-list-new-tenant-requests.js b/custos_admin_portal/custos_admin_portal/static/common/js/apps/custos_admin_portal_admin/entry-admin-list-new-tenant-requests.js new file mode 100644 index 0000000..3676b1c --- /dev/null +++ b/custos_admin_portal/custos_admin_portal/static/common/js/apps/custos_admin_portal_admin/entry-admin-list-new-tenant-requests.js @@ -0,0 +1,25 @@ +import { entry } from "../../index"; +import ListTenantRequestsContainer from "./ListTenantRequestsContainer"; +import MainLayout from "../../components/MainLayout"; + +// Expect a template with id "edit-experiment" and experiment-id data attribute +// +// <div id="edit-experiment" data-experiment-id="..expid.."/> + +entry(Vue => { + new Vue({ + render(h) { + return h(MainLayout, [ + h(ListTenantRequestsContainer) + ]); + }, + data() { + return { + experimentId: null + }; + }, + beforeMount() { + console.log("Entry for list-admin-new-tenant-request is executed") + } + }).$mount("#admin-list-requests"); +}); diff --git a/custos_admin_portal/custos_admin_portal/static/common/js/apps/custos_admin_portal_admin/entry-view-tenant-request.js b/custos_admin_portal/custos_admin_portal/static/common/js/apps/custos_admin_portal_admin/entry-admin-view-tenant-request.js similarity index 92% rename from custos_admin_portal/custos_admin_portal/static/common/js/apps/custos_admin_portal_admin/entry-view-tenant-request.js rename to custos_admin_portal/custos_admin_portal/static/common/js/apps/custos_admin_portal_admin/entry-admin-view-tenant-request.js index 3aab6cb..aa24249 100644 --- a/custos_admin_portal/custos_admin_portal/static/common/js/apps/custos_admin_portal_admin/entry-view-tenant-request.js +++ b/custos_admin_portal/custos_admin_portal/static/common/js/apps/custos_admin_portal_admin/entry-admin-view-tenant-request.js @@ -24,7 +24,7 @@ entry(Vue => { }, beforeMount() { this.tenantRequestId = JSON.parse(this.$el.dataset.tenantRequestId); - console.log("Entry is executed"); + console.log("Entry adming view request is executed"); console.log(this.$el.dataset) } }).$mount("#admin-view-request"); diff --git a/custos_admin_portal/custos_admin_portal/static/common/js/apps/custos_admin_portal_admin/utils/urls.js b/custos_admin_portal/custos_admin_portal/static/common/js/apps/custos_admin_portal_admin/utils/urls.js index 3867fbb..c096ad1 100644 --- a/custos_admin_portal/custos_admin_portal/static/common/js/apps/custos_admin_portal_admin/utils/urls.js +++ b/custos_admin_portal/custos_admin_portal/static/common/js/apps/custos_admin_portal_admin/utils/urls.js @@ -9,7 +9,20 @@ export default { }, navigateToAdminViewRequest(tenantRequest) { window.location.assign( - this.viewTenantRequest(tenantRequest) + this.viewAdminTenantRequest(tenantRequest) ); - } + }, + adminEditTenantRequest(tenantRequest) { + return ( + "/admin/edit-tenant-request/" + + encodeURIComponent(tenantRequest.request_id) + + "/" + ); + }, + navigateToAdminEditRequest(tenantRequest) { + window.location.assign( + this.adminEditTenantRequest(tenantRequest) + ); + }, + }; diff --git a/custos_admin_portal/custos_admin_portal/static/common/js/apps/workspace/RequestNewTenantContainer.vue b/custos_admin_portal/custos_admin_portal/static/common/js/apps/workspace/RequestNewTenantContainer.vue index 9d833f6..4c68b44 100755 --- a/custos_admin_portal/custos_admin_portal/static/common/js/apps/workspace/RequestNewTenantContainer.vue +++ b/custos_admin_portal/custos_admin_portal/static/common/js/apps/workspace/RequestNewTenantContainer.vue @@ -272,8 +272,13 @@ </b-form-group> - <b-button type="submit" variant="primary">Submit</b-button> - + <b-button v-b-modal.modal-1 type="submit" variant="primary">Submit</b-button> + <div> + <b-modal id="modal-1" title="Client Id and Secret"> + <p class="my-4">Client Id: custos-cs8jycc8cu66jnc2tsu3-10000002</p> + <p class="my-4">Secret: sYh5JIunQQ3aNsG53vC1ZZKrCT8MJmRKzbRmwfla</p> + </b-modal> + </div> </b-form> </div> diff --git a/custos_admin_portal/custos_admin_portal/static/common/js/apps/workspace/ViewTenantRequestContainer.vue b/custos_admin_portal/custos_admin_portal/static/common/js/apps/workspace/ViewTenantRequestContainer.vue index 5b4e2ea..b4e89b2 100644 --- a/custos_admin_portal/custos_admin_portal/static/common/js/apps/workspace/ViewTenantRequestContainer.vue +++ b/custos_admin_portal/custos_admin_portal/static/common/js/apps/workspace/ViewTenantRequestContainer.vue @@ -35,6 +35,35 @@ <th scope="row">Admin Name</th> <td>{{request.admin_first_name}} {{ " " }} {{request.admin_last_name}}</td> </tr> + <tr> + <th scope="row">Primary contact</th> + <td>{{request.primary_contact}}</td> + </tr> + <tr> + <th scope="row">Secondary contact</th> + <td>{{request.secondary_contact}}</td> + </tr> + <tr> + <th scope="row">Redirect URI Name</th> + <td>{{request.redirect_uris}}</td> + </tr> + <tr> + <th scope="row">Scope</th> + <td>{{request.scope}}</td> + </tr> + <tr> + <th scope="row">Domain</th> + <td>{{request.domain}}</td> + </tr> + <tr> + <th scope="row">Client URI</th> + <td>{{request.client_uri}}</td> + </tr> + <tr> + <th scope="row">Comment</th> + <td>{{request.comment}}</td> + </tr> + </tbody> </table> diff --git a/custos_admin_portal/custos_admin_portal/static/common/vue.config.js b/custos_admin_portal/custos_admin_portal/static/common/vue.config.js index e2d7bad..6edcf61 100755 --- a/custos_admin_portal/custos_admin_portal/static/common/vue.config.js +++ b/custos_admin_portal/custos_admin_portal/static/common/vue.config.js @@ -9,7 +9,9 @@ module.exports = { 'request-new-tenant': "./js/apps/workspace/entry-request-new-tenant", 'list-requests': "./js/apps/workspace/entry-list-new-tenant-requests", 'view-request': "./js/apps/workspace/entry-view-tenant-request", - 'admin-view-request': "./js/apps/custos_admin_portal_admin/entry-view-tenant-request" + 'admin-view-request': "./js/apps/custos_admin_portal_admin/entry-admin-view-tenant-request", + 'admin-edit-request': "./js/apps/custos_admin_portal_admin/entry-admin-edit-tenant-request", + 'admin-list-requests': "./js/apps/custos_admin_portal_admin/entry-admin-list-new-tenant-requests" }, css: { loaderOptions: { diff --git a/custos_admin_portal/custos_admin_portal/templates/base.html b/custos_admin_portal/custos_admin_portal/templates/base.html index 16024b9..9a4a419 100644 --- a/custos_admin_portal/custos_admin_portal/templates/base.html +++ b/custos_admin_portal/custos_admin_portal/templates/base.html @@ -147,7 +147,7 @@ {% block header %} <img class=c-header__logo src="{% static 'images/airavata-logo.png' %}" alt="Airavata Logo"/> {% endblock %} - <div class=c-header__title><a href="/">{% block title %}Custos Admin Portal{% endblock %}</a> + <div class=c-header__title><a href="/">{% block title %}Custos Portal{% endblock %}</a> </div> </header> diff --git a/custos_admin_portal/custos_admin_portal/templates/custos_admin_portal/home.html b/custos_admin_portal/custos_admin_portal/templates/custos_admin_portal/home.html index 90131f9..3fa6752 100644 --- a/custos_admin_portal/custos_admin_portal/templates/custos_admin_portal/home.html +++ b/custos_admin_portal/custos_admin_portal/templates/custos_admin_portal/home.html @@ -7,11 +7,9 @@ <div class="jumbotron"> <h1>Welcome!</h1> <p>This is the Django based web portal for Custos Admin.</p> - {% if not user.is_authenticated %} <p><a class="btn btn-primary btn-lg" href="{% url 'custos_admin_portal_auth:login' %}" role="button">Login ยป</a></p> <p><a class="btn btn-primary btn-lg" href="{% url 'custos_admin_portal_auth:create_account' %}" role="button">Register</a></p> - {% endif %} </div> {% if user.is_authenticated %} <div class="row">
