You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nifi.apache.org by mc...@apache.org on 2015/11/03 23:08:51 UTC

nifi git commit: NIFI-655: - Starting to style the login page. - Added simple 'login' support by identifying username/password. Issuing JWT token coming... - Added logout support - Rendering the username when appropriate.

Repository: nifi
Updated Branches:
  refs/heads/NIFI-655 ed27ed044 -> 7799deeaa


NIFI-655:
- Starting to style the login page.
- Added simple 'login' support by identifying username/password. Issuing JWT token coming...
- Added logout support
- Rendering the username when appropriate.


Project: http://git-wip-us.apache.org/repos/asf/nifi/repo
Commit: http://git-wip-us.apache.org/repos/asf/nifi/commit/7799deea
Tree: http://git-wip-us.apache.org/repos/asf/nifi/tree/7799deea
Diff: http://git-wip-us.apache.org/repos/asf/nifi/diff/7799deea

Branch: refs/heads/NIFI-655
Commit: 7799deeaa1543d3ba0a6b70cdc0611c968d38b90
Parents: ed27ed0
Author: Matt Gilman <ma...@gmail.com>
Authored: Tue Nov 3 17:08:37 2015 -0500
Committer: Matt Gilman <ma...@gmail.com>
Committed: Tue Nov 3 17:08:37 2015 -0500

----------------------------------------------------------------------
 .../service/action/AuthorizeUserAction.java     |   4 +-
 .../form/LoginAuthenticationFilter.java         |   2 +-
 .../nifi/web/security/jwt/JwtService.java       |  18 +-
 .../src/main/webapp/WEB-INF/pages/login.jsp     |  14 +-
 .../WEB-INF/partials/canvas/canvas-header.jsp   |   4 +-
 .../WEB-INF/partials/login/login-form.jsp       |  19 +-
 .../WEB-INF/partials/login/login-message.jsp    |   1 +
 .../WEB-INF/partials/login/login-submission.jsp |   2 +-
 .../partials/login/nifi-registration-form.jsp   |  19 +-
 .../partials/login/user-registration-form.jsp   |  14 ++
 .../nifi-web-ui/src/main/webapp/css/canvas.css  |   1 -
 .../nifi-web-ui/src/main/webapp/css/header.css  |   1 +
 .../nifi-web-ui/src/main/webapp/css/login.css   |  64 +++++-
 .../nifi-web-ui/src/main/webapp/css/main.css    |   2 +-
 .../webapp/js/nf/canvas/nf-canvas-header.js     |  10 +-
 .../src/main/webapp/js/nf/canvas/nf-canvas.js   |   5 +-
 .../src/main/webapp/js/nf/login/nf-login.js     | 222 +++++++++++--------
 17 files changed, 271 insertions(+), 131 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/nifi/blob/7799deea/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-administration/src/main/java/org/apache/nifi/admin/service/action/AuthorizeUserAction.java
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-administration/src/main/java/org/apache/nifi/admin/service/action/AuthorizeUserAction.java b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-administration/src/main/java/org/apache/nifi/admin/service/action/AuthorizeUserAction.java
index fe32772..f83dc4d 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-administration/src/main/java/org/apache/nifi/admin/service/action/AuthorizeUserAction.java
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-administration/src/main/java/org/apache/nifi/admin/service/action/AuthorizeUserAction.java
@@ -165,9 +165,9 @@ public class AuthorizeUserAction extends AbstractUserAction<NiFiUser> {
      */
     private void checkAccountStatus(NiFiUser user) {
         if (AccountStatus.DISABLED.equals(user.getStatus())) {
-            throw new AccountDisabledException(String.format("Account for %s is disabled.", user.getDn()));
+            throw new AccountDisabledException(String.format("The account for %s has been disabled.", user.getDn()));
         } else if (AccountStatus.PENDING.equals(user.getStatus())) {
-            throw new AccountPendingException(String.format("Account for %s is pending.", user.getDn()));
+            throw new AccountPendingException(String.format("The account for %s is currently pending approval.", user.getDn()));
         }
     }
 }

http://git-wip-us.apache.org/repos/asf/nifi/blob/7799deea/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-security/src/main/java/org/apache/nifi/web/security/form/LoginAuthenticationFilter.java
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-security/src/main/java/org/apache/nifi/web/security/form/LoginAuthenticationFilter.java b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-security/src/main/java/org/apache/nifi/web/security/form/LoginAuthenticationFilter.java
index fcff545..c2ceb49 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-security/src/main/java/org/apache/nifi/web/security/form/LoginAuthenticationFilter.java
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-security/src/main/java/org/apache/nifi/web/security/form/LoginAuthenticationFilter.java
@@ -155,7 +155,7 @@ public class LoginAuthenticationFilter extends AbstractAuthenticationProcessingF
         jwtService.addToken(response, authentication);
 
         // mark as successful
-        response.setStatus(HttpServletResponse.SC_OK);
+        response.setStatus(HttpServletResponse.SC_CREATED);
         response.setContentType("text/plain");
         response.setContentLength(0);
     }

http://git-wip-us.apache.org/repos/asf/nifi/blob/7799deea/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-security/src/main/java/org/apache/nifi/web/security/jwt/JwtService.java
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-security/src/main/java/org/apache/nifi/web/security/jwt/JwtService.java b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-security/src/main/java/org/apache/nifi/web/security/jwt/JwtService.java
index cfe7073..1ff67df 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-security/src/main/java/org/apache/nifi/web/security/jwt/JwtService.java
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-security/src/main/java/org/apache/nifi/web/security/jwt/JwtService.java
@@ -18,13 +18,16 @@ package org.apache.nifi.web.security.jwt;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.security.core.Authentication;
 
 /**
  *
  */
 public class JwtService {
-
+    
+    private final static String AUTHORIZATION = "Authorization";
+    
     /**
      * Gets the Authentication by extracting a JWT token from the specified request.
      *
@@ -32,10 +35,12 @@ public class JwtService {
      * @return The user identifier from the token
      */
     public String getAuthentication(final HttpServletRequest request) {
+        // TODO : actually extract/verify token
+        
         // extract/verify token from incoming request
-        // load user details with identifier from token
-        // create authentication using user details
-        return null;
+        final String authorization = request.getHeader(AUTHORIZATION);
+        final String username = StringUtils.substringAfterLast(authorization, " ");
+        return username;
     }
 
     /**
@@ -45,7 +50,12 @@ public class JwtService {
      * @param authentication The authentication to generate a token for
      */
     public void addToken(final HttpServletResponse response, final Authentication authentication) {
+        // TODO : actually create real token
+        
         // create a token the specified authentication
+        String token = authentication.getName();
+        
         // add the token as a response header
+        response.setHeader(AUTHORIZATION, "Bearer " + token);
     }
 }

http://git-wip-us.apache.org/repos/asf/nifi/blob/7799deea/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/WEB-INF/pages/login.jsp
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/WEB-INF/pages/login.jsp b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/WEB-INF/pages/login.jsp
index 58bdaad..2c52032 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/WEB-INF/pages/login.jsp
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/WEB-INF/pages/login.jsp
@@ -34,11 +34,13 @@
         <script type="text/javascript" src="js/nf/nf-namespace.js?${project.version}"></script>
         ${nf.login.script.tags}
     </head>
-    <body>
-        <jsp:include page="/WEB-INF/partials/login/login-message.jsp"/>
-        <jsp:include page="/WEB-INF/partials/login/login-form.jsp"/>
-        <jsp:include page="/WEB-INF/partials/login/user-registration-form.jsp"/>
-        <jsp:include page="/WEB-INF/partials/login/nifi-registration-form.jsp"/>
-        <jsp:include page="/WEB-INF/partials/login/login-submission.jsp"/>
+    <body class="login-body">
+        <div id="login-contents-container">
+            <jsp:include page="/WEB-INF/partials/login/login-message.jsp"/>
+            <jsp:include page="/WEB-INF/partials/login/login-form.jsp"/>
+            <jsp:include page="/WEB-INF/partials/login/user-registration-form.jsp"/>
+            <jsp:include page="/WEB-INF/partials/login/nifi-registration-form.jsp"/>
+            <jsp:include page="/WEB-INF/partials/login/login-submission.jsp"/>
+        </div>
     </body>
 </html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/nifi/blob/7799deea/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/WEB-INF/partials/canvas/canvas-header.jsp
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/WEB-INF/partials/canvas/canvas-header.jsp b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/WEB-INF/partials/canvas/canvas-header.jsp
index 43e306e..81296d2 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/WEB-INF/partials/canvas/canvas-header.jsp
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/WEB-INF/partials/canvas/canvas-header.jsp
@@ -44,8 +44,10 @@
     </div>
     <div id="header-links-container">
         <ul>
+            <li id="current-user-container">
+                <span id="current-user"></span>
+            </li>
             <li id="login-link-container">
-                <span id="current-user" class="hidden"></span>
                 <span id="login-link" class="link">login</span>
             </li>
             <li id="logout-link-container" style="display: none;">

http://git-wip-us.apache.org/repos/asf/nifi/blob/7799deea/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/WEB-INF/partials/login/login-form.jsp
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/WEB-INF/partials/login/login-form.jsp b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/WEB-INF/partials/login/login-form.jsp
index 2ee0a17..f8f06f3 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/WEB-INF/partials/login/login-form.jsp
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/WEB-INF/partials/login/login-form.jsp
@@ -16,10 +16,17 @@
 --%>
 <%@ page contentType="text/html" pageEncoding="UTF-8" session="false" %>
 <div id="login-container" class="hidden">
-    <legend>Please Login</legend>
-    <label for="username">Username</label>
-    <input type="text" id="username" name="username" value="${username}"/>
-    <br>
-    <label for="password">Password</label>
-    <input type="password" id="password" name="password"/>
+    <div class="login-title">Log In</div>
+    <div class="setting">
+        <div class="setting-name">Username</div>
+        <div class="setting-field">
+            <input type="text" id="username"/>
+        </div>
+    </div>
+    <div class="setting">
+        <div class="setting-name">Password</div>
+        <div class="setting-field">
+            <input type="password" id="password"/>
+        </div>
+    </div>
 </div>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/nifi/blob/7799deea/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/WEB-INF/partials/login/login-message.jsp
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/WEB-INF/partials/login/login-message.jsp b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/WEB-INF/partials/login/login-message.jsp
index 5284c23..053af81 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/WEB-INF/partials/login/login-message.jsp
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/WEB-INF/partials/login/login-message.jsp
@@ -16,5 +16,6 @@
 --%>
 <%@ page contentType="text/html" pageEncoding="UTF-8" session="false" %>
 <div id="login-message-container" class="hidden">
+    <div id="login-message-title"></div>
     <div id="login-message"></div>
 </div>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/nifi/blob/7799deea/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/WEB-INF/partials/login/login-submission.jsp
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/WEB-INF/partials/login/login-submission.jsp b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/WEB-INF/partials/login/login-submission.jsp
index 5749ab9..65c6077 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/WEB-INF/partials/login/login-submission.jsp
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/WEB-INF/partials/login/login-submission.jsp
@@ -16,5 +16,5 @@
 --%>
 <%@ page contentType="text/html" pageEncoding="UTF-8" session="false" %>
 <div id="login-submission-container" class="hidden">
-    <button id="login-submission-button" type="submit" class="btn">Log in</button>
+    <div id="login-submission-button" class="button">Log in</div>
 </div>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/nifi/blob/7799deea/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/WEB-INF/partials/login/nifi-registration-form.jsp
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/WEB-INF/partials/login/nifi-registration-form.jsp b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/WEB-INF/partials/login/nifi-registration-form.jsp
index 3d5f864..afa7687 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/WEB-INF/partials/login/nifi-registration-form.jsp
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/WEB-INF/partials/login/nifi-registration-form.jsp
@@ -16,16 +16,15 @@
 --%>
 <%@ page contentType="text/html" pageEncoding="UTF-8" session="false" %>
 <div id="nifi-registration-container" class="hidden">
-    <div id="nifi-registration-form" class="settings">
-        <div class="setting">
-            <div class="setting-name">Justification</div>
-            <div class="setting-field">
-                <textarea cols="30" rows="4" id="nifi-registration-justification" maxlength="500" class="setting-input"></textarea>
-            </div>
-            <div style="text-align: right; color: #666; margin-top: 2px;">
-                <span id="remaining-characters"></span>&nbsp;characters remaining
-            </div>
-            <div class="clear"></div>
+    <div id="nifi-registration-title" class="login-title">Submit Justification</div>
+    <div class="setting">
+        <div class="setting-name">Justification</div>
+        <div class="setting-field">
+            <textarea cols="30" rows="4" id="nifi-registration-justification" maxlength="500" class="setting-input"></textarea>
         </div>
+        <div style="text-align: right; color: #666; margin-top: 2px;">
+            <span id="remaining-characters"></span>&nbsp;characters remaining
+        </div>
+        <div class="clear"></div>
     </div>
 </div>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/nifi/blob/7799deea/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/WEB-INF/partials/login/user-registration-form.jsp
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/WEB-INF/partials/login/user-registration-form.jsp b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/WEB-INF/partials/login/user-registration-form.jsp
index 92382b3..89517e4 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/WEB-INF/partials/login/user-registration-form.jsp
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/WEB-INF/partials/login/user-registration-form.jsp
@@ -16,4 +16,18 @@
 --%>
 <%@ page contentType="text/html" pageEncoding="UTF-8" session="false" %>
 <div id="user-registration-container" class="hidden">
+    <div class="login-title">Log In</div>
+    <div class="setting">
+        <div class="setting-name">Username</div>
+        <div class="setting-field">
+            <input type="text" id="username"/>
+        </div>
+    </div>
+    <div class="setting">
+        <div class="setting-name">Password</div>
+        <div class="setting-field">
+            <input type="password" id="password"/><br/>
+            <input type="password" id="password-confirmation" placeholder="Confirm password"/>
+        </div>
+    </div>
 </div>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/nifi/blob/7799deea/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/css/canvas.css
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/css/canvas.css b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/css/canvas.css
index e4cf89a..abb5ebd 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/css/canvas.css
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/css/canvas.css
@@ -41,5 +41,4 @@
 @import url(settings.css);
 @import url(about.css);
 @import url(message-pane.css);
-@import url(login.css);
 @import url(status-history.css);
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/nifi/blob/7799deea/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/css/header.css
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/css/header.css b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/css/header.css
index 7161a8c..3f0b299 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/css/header.css
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/css/header.css
@@ -508,6 +508,7 @@ div.search-glass-pane {
 
 #current-user {
     margin-right: 8px;
+    font-weight: bold;
 }
 
 #utilities-container {

http://git-wip-us.apache.org/repos/asf/nifi/blob/7799deea/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/css/login.css
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/css/login.css b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/css/login.css
index 72f15f4..e8466df 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/css/login.css
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/css/login.css
@@ -19,19 +19,73 @@
     Login Styles
 */
 
+body.login-body {
+    position: absolute;
+    top: 0px;
+    left: 0px;
+    bottom: 0px;
+    right: 0px;
+    background: #fff url(../images/bg-error.png) left top no-repeat;
+    font-family: Verdana, Geneva, sans-serif;
+    color: #191919;
+    z-index: 999999;
+}
+
+#login-contents-container {
+    margin-top: 100px;
+    margin-left: 100px;
+}
+
+#login-message-title {
+    font-size: 18px;
+    color: #294c58;
+    margin-bottom: 16px;
+}
+
+#login-message {
+    font-size: 11px;
+}
+
+.login-title {
+    font-size: 12px;
+    font-weight: bold;
+    margin-bottom: 10px;
+    color: #000;
+}
+
 /*
-    NiFi Registration
+    Login
 */
 
-#nifi-registration-container {
+body.login-body input, body.login-body textarea {
+    width: 400px;
 }
 
-#nifi-registration-form {
+/*
+    User Registration
+*/
+
+/*
+    NiFi Registration
+*/
+
+#nifi-registration-container {
     margin-top: 10px;
-    width: 610px;
+    width: 412px;
 }
 
 #nifi-registration-justification {
-    width: 600px;
     height: 200px;
+}
+
+/*
+    Submission
+*/
+
+#login-submission-container {
+    width: 412px;
+}
+
+#login-submission-button {
+    
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/nifi/blob/7799deea/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/css/main.css
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/css/main.css b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/css/main.css
index 95ee641..2e43a8b 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/css/main.css
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/css/main.css
@@ -153,7 +153,7 @@ input.filter-list {
     background: transparent url(../images/iconTwistArrow.png) no-repeat scroll top right;
 }
 
-input[type=text], textarea {
+input[type=text], input[type=password], textarea {
     background: white url(../images/bgInputText.png) repeat-x scroll top;
     border: 1px solid #ccc;
     font-family: Verdana;

http://git-wip-us.apache.org/repos/asf/nifi/blob/7799deea/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-canvas-header.js
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-canvas-header.js b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-canvas-header.js
index 9ae3f4e..9e7bce1 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-canvas-header.js
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-canvas-header.js
@@ -31,6 +31,8 @@ nf.CanvasHeader = (function () {
     return {
         /**
          * Initialize the canvas header.
+         * 
+         * @argument {boolean} supportsLogin Whether login is supported
          */
         init: function (supportsLogin) {
             // mouse over for the reporting link
@@ -140,7 +142,7 @@ nf.CanvasHeader = (function () {
             });
 
             // show the login link if supported and user is currently anonymous
-            var isAnonymous = $('#current-user').text() === 'anonymous';
+            var isAnonymous = $('#current-user').text() === nf.Canvas.ANONYMOUS_USER_TEXT;
             if (supportsLogin === true && isAnonymous) {
                 // login link
                 $('#login-link').click(function () {
@@ -150,9 +152,15 @@ nf.CanvasHeader = (function () {
                 $('#login-link-container').css('display', 'none');
             }
             
+            // if login is not supported, don't show the current user
+            if (supportsLogin !== true) {
+                $('#current-user-container').css('display', 'none');
+            }
+            
             // logout link
             $('#logout-link').click(function () {
                 nf.Storage.removeItem("jwt");
+                window.location = '/nifi';
             });
 
             // initialize the new template dialog

http://git-wip-us.apache.org/repos/asf/nifi/blob/7799deea/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-canvas.js
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-canvas.js b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-canvas.js
index 1906620..b714c46 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-canvas.js
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-canvas.js
@@ -938,6 +938,7 @@ nf.Canvas = (function () {
 
     return {
         
+        ANONYMOUS_USER_TEXT: 'Anonymous user',
         CANVAS_OFFSET: 0,
         
         /**
@@ -1054,10 +1055,11 @@ nf.Canvas = (function () {
                     nf.Common.setAuthorities(authoritiesResponse.authorities);
 
                     // at this point the user may be themselves or anonymous
-                    $('#current-user').text(identityResponse.identity).show();
 
                     // if the user is logged, we want to determine if they were logged in using a certificate
                     if (identityResponse.identity !== 'anonymous') {
+                        $('#current-user').text(identityResponse.identity).show();
+                        
                         // attempt to get a token for the current user without passing login credentials
                         $.ajax({
                             type: 'GET',
@@ -1070,6 +1072,7 @@ nf.Canvas = (function () {
                             deferred.resolve();
                         });
                     } else {
+                        $('#current-user').text(nf.Canvas.ANONYMOUS_USER_TEXT).show();
                         deferred.resolve();
                     }
                 }).fail(function (xhr, status, error) {

http://git-wip-us.apache.org/repos/asf/nifi/blob/7799deea/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/login/nf-login.js
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/login/nf-login.js b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/login/nf-login.js
index 9bc3264..b844cba 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/login/nf-login.js
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/login/nf-login.js
@@ -22,7 +22,9 @@ $(document).ready(function () {
 });
 
 nf.Login = (function () {
-    
+
+    var isAnonymous = false;
+
     var config = {
         urls: {
             registrationStatus: '../nifi-api/registration/status',
@@ -38,109 +40,124 @@ nf.Login = (function () {
         $('#login-message-container').show();
     };
 
-    var initializeLogin = function () {
-        return $.ajax({
-            type: 'GET',
-            url: config.urls.loginConfig,
-            dataType: 'json'
-        }).done(function (response) {
-            var config = response.config;
-            
-            // if this nifi supports login, render the login form
-            if (config.supportsLogin === true) {
-                
-                // handle login click
-                $('#login-button').on('click', function () {
-                    login().done(function (response, status, xhr) {
-                        var authorization = xhr.getResponseHeader('Authorization');
-                        var badToken = false;
-                        
-                        // ensure there was a token in the response
-                        if (authorization) {
-                            var tokens = authorization.split(/ /);
-                            
-                            // ensure the token is the appropriate length
-                            if (tokens.length === 2) {
-                                // store the jwt and reload the page
-                                nf.Storage.setItem('jwt', tokens[1]);
-                                window.location = '/nifi';
-                            } else {
-                                badToken = true;
-                            }
-                        } else {
-                            badToken = true;
-                        }
-                        
-                        if (badToken === true) {
-                            // TODO - show unable to parse response token
-                        }
-                    });
-                });
-                
-                // show the login form
-                $('#login-container').show();
-            }
-            
-            // if this nifi supports registration, render the registration form
-            if (config.supportsRegistration === true) {
-                initializeUserRegistration();
-                
-                // automatically include support for nifi registration
-                initializeNiFiRegistration();
-            }
-        });
+    var initializeLogin = function (supportsRegistration) {
+        // if this nifi supports registration, render the registration form
+        if (supportsRegistration === true) {
+            initializeUserRegistration();
+
+            // automatically include support for nifi registration
+            initializeNiFiRegistration();
+
+            // hide the submit justification title
+            $('#nifi-registration-title').hide();
+
+            // update the submit button text
+            $('#login-submission-button').text('Create');
+        }
+        
+        // show the login form
+        $('#login-container').show();
     };
-    
+
     var initializeUserRegistration = function () {
-        
+
         // show the user registration form
         $('#user-registration-container').show();
     };
-    
-    var login = function () {
-        var username = $('#username').val();
-        var password = $('#password').val();
-        
-        return $.ajax({
-            type: 'POST',
-            url: '../nifi-api/token',
-            data: {
-                'username': username,
-                'password': password
-            },
-            dataType: 'json'
-        });
-    };
-    
+
     var initializeNiFiRegistration = function () {
         $('#nifi-registration-justification').count({
             charCountField: '#remaining-characters'
         });
 
+        // update the button text
+        $('#login-submission-button').text('Submit');
+
         // show the nifi registration container
         $('#nifi-registration-container').show();
     };
-    
+
     var initializeSubmission = function () {
         $('#login-submission-button').one('click', function () {
             if ($('#login-container').is(':visible')) {
+                var username = $('#username').val();
+                var password = $('#password').val();
+
                 // login submit
+                $.ajax({
+                    type: 'POST',
+                    url: '../nifi-api/token',
+                    data: {
+                        'username': username,
+                        'password': password
+                    }
+                }).done(function (response, status, xhr) {
+                    var authorization = xhr.getResponseHeader('Authorization');
+                    var badToken = false;
+
+                    // ensure there was a token in the response
+                    if (authorization) {
+                        var tokens = authorization.split(/ /);
+
+                        // ensure the token is the appropriate length
+                        if (tokens.length === 2) {
+                            // store the jwt and reload the page
+                            nf.Storage.setItem('jwt', tokens[1]);
+                            
+                            // reload as appropriate
+                            if (top !== window) {
+                                parent.window.location = '/nifi';
+                            } else {
+                                window.location = '/nifi';
+                            }
+                            return;
+                        } else {
+                            badToken = true;
+                        }
+                    } else {
+                        badToken = true;
+                    }
+
+                    if (badToken === true) {
+                        $('#login-message-title').text('An unexpected error has occurred');
+                        $('#login-message').text('The id token could not be parsed.');
+                        
+                        // update visibility
+                        $('#login-container').hide();
+                        $('#login-submission-container').hide();
+                        $('#login-message-container').show();
+                    }
+                }).fail(function (xhr, status, error) {
+                    $('#login-message-title').text('An unexpected error has occurred');
+                    $('#login-message').text(xhr.responseText);
+                    
+                    // update visibility
+                    $('#login-container').hide();
+                    $('#login-submission-container').hide();
+                    $('#login-message-container').show();
+                });
             } else if ($('#user-registration-container').is(':visible')) {
+                var justification = $('#registration-justification').val();
+                
                 // new user account submit
             } else if ($('#nifi-registration-container').is(':visible')) {
-                // new nifi account submit
-                var justification = $('#registration-justification').val();
-
                 // attempt to create the user account registration
                 $.ajax({
                     type: 'POST',
                     url: config.urls.users,
                     data: {
-                        'justification': justification
+                        'justification': $('#registration-justification').val()
                     }
                 }).done(function (response) {
-                    $('#login-message').text('Thanks! Your request will be processed shortly.');
+                    var markup = 'An administrator will process your request shortly.';
+                    if (isAnonymous === true) {
+                        markup += '<br/><br/>In the meantime you can continue accessing anonymously.';
+                    }
+
+                    $('#login-message-title').text('Thanks!');
+                    $('#login-message').html(markup);
                 }).fail(function (xhr, status, error) {
+                    $('#login-message-title').text('An unexpected error has occurred');
                     $('#login-message').text(xhr.responseText);
                 }).always(function () {
                     // update form visibility
@@ -150,7 +167,7 @@ nf.Login = (function () {
                 });
             }
         });
-        
+
         $('#login-submission-container').show();
     };
 
@@ -160,27 +177,29 @@ nf.Login = (function () {
          */
         init: function () {
             nf.Storage.init();
-            
+
             var showMessage = false;
             var needsLogin = false;
             var needsNiFiRegistration = false;
-            
+
             var token = $.ajax({
                 type: 'GET',
                 url: config.urls.token
             });
-            
+
             var identity = $.ajax({
                 type: 'GET',
                 url: config.urls.identity,
                 dataType: 'json'
             });
-            
-            var pageStateInit = $.Deferred(function(deferred) {
+
+            var pageStateInit = $.Deferred(function (deferred) {
                 // get the current user's identity
                 identity.done(function (response) {
                     // if the user is anonymous see if they need to login or if they are working with a certificate
                     if (response.identity === 'anonymous') {
+                        isAnonymous = true;
+
                         // request a token without including credentials, if successful then the user is using a certificate
                         token.done(function () {
                             // the user is using a certificate, see if their account is active/pending/revoked/etc
@@ -189,8 +208,9 @@ nf.Login = (function () {
                                 url: config.urls.registrationStatus
                             }).done(function () {
                                 showMessage = true;
-                                
+
                                 // account is active and good
+                                $('#login-message-title').text('Success');
                                 $('#login-message').text('Your account is active and you are already logged in.');
                                 deferred.resolve();
                             }).fail(function (xhr, status, error) {
@@ -199,8 +219,9 @@ nf.Login = (function () {
                                     needsNiFiRegistration = true;
                                 } else {
                                     showMessage = true;
-                                    
-                                    // anonymous user and non-401 means they already have an account and it's pending/revoked 
+
+                                    // anonymous user and non-401 means they already have an account and it's pending/revoked
+                                    $('#login-message-title').text('Access Denied');
                                     if ($.trim(xhr.responseText) === '') {
                                         $('#login-message').text('Unable to check registration status.');
                                     } else {
@@ -216,8 +237,9 @@ nf.Login = (function () {
                         });
                     } else {
                         showMessage = true;
-                        
+
                         // the user is not anonymous and has an active account (though maybe role-less)
+                        $('#login-message-title').text('Success');
                         $('#login-message').text('Your account is active and you are already logged in.');
                         deferred.resolve();
                     }
@@ -236,29 +258,47 @@ nf.Login = (function () {
                         });
                     } else {
                         showMessage = true;
-                        
+
                         // the user is logged in with certificate or credentials but their account is pending/revoked. error message should indicate
+                        $('#login-message-title').text('Access Denied');
                         if ($.trim(xhr.responseText) === '') {
                             $('#login-message').text('Unable to authorize you to use this NiFi and anonymous access is disabled.');
                         } else {
                             $('#login-message').text(xhr.responseText);
                         }
-                        
+
                         deferred.resolve();
                     }
                 });
             }).promise();
             
+            var loginConfigXhr = $.ajax({
+                type: 'GET',
+                url: config.urls.loginConfig,
+                dataType: 'json'
+            });
+
             // render the page accordingly
-            pageStateInit.done(function () {
+            $.when(loginConfigXhr, pageStateInit).done(function (loginResult) {
+                var loginResponse = loginResult[0];
+                var loginConfig = loginResponse.config;
+                
+                // if login is required, verify its supported
+                if (loginConfig.supportsLogin === false && needsLogin === true) {
+                    $('#login-message-title').text('Access Denied');
+                    $('#login-message').text('This NiFi is not configured to support login.');
+                    showMessage = true;
+                    needsLogin = false;
+                }
+                
                 if (showMessage === true) {
                     initializeMessage();
                 } else if (needsLogin === true) {
-                    initializeLogin();
+                    initializeLogin(loginConfig.supportsRegistration);
                 } else if (needsNiFiRegistration === true) {
                     initializeNiFiRegistration();
                 }
-                
+
                 if (needsLogin === true || needsNiFiRegistration === true) {
                     initializeSubmission();
                 }