-
Notifications
You must be signed in to change notification settings - Fork 713
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Addresses Issue #1465 : Added possibility to manage accounts in the U…
…I. (#1468)
- Loading branch information
Showing
14 changed files
with
797 additions
and
19 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,47 @@ | ||
<div class="well"> | ||
<h2>Change Password</h2> | ||
#if($request.getAuthorizationUsername()) | ||
<form method="post"> | ||
<input type="hidden" name="responder" value="saveAccount"/> | ||
<fieldset> | ||
<label for="CurrentPasswordText">Current Password:</label> | ||
<input type="text" id="CurrentPasswordText" name="CurrentPasswordText" size="70"/> | ||
</fieldset> | ||
<fieldset> | ||
<label for="NewPasswordText">New Password:</label> | ||
<input type="text" id="NewPasswordText" name="NewPasswordText" size="70"/> | ||
</fieldset> | ||
<fieldset> | ||
<label for="ConfirmPasswordText">Confirm Password:</label> | ||
<input type="text" id="ConfirmPasswordText" name="ConfirmPasswordText" size="70"/> | ||
</fieldset> | ||
<fieldset class="buttons"> | ||
<input type="submit" name="changePassword" value="Change My Password"/> | ||
</fieldset> | ||
</form> | ||
#else | ||
Log in to view details. | ||
#end | ||
</div> | ||
|
||
#if($request.getAuthorizationUsername().equals("admin")) | ||
<div class="well"> | ||
<h2>Create / Delete Users</h2> | ||
<form method="post"> | ||
<input type="hidden" name="responder" value="saveAccount"/> | ||
<p>For password reset, you can delete and re-create the user.</p> | ||
<fieldset> | ||
<label for="UserNameText">Username:</label> | ||
<input type="text" id="UserNameText" name="UserNameText" size="70"/> | ||
</fieldset> | ||
<fieldset> | ||
<label for="UserPasswordText">Password:</label> | ||
<input type="text" id="UserPasswordText" name="UserPasswordText" placeholder="Not used for deleting users." size="70"/> | ||
</fieldset> | ||
<fieldset class="buttons"> | ||
<input type="submit" name="createUser" value="Create User"/> | ||
<input type="submit" name="deleteUser" value="Delete User"/> | ||
</fieldset> | ||
</form> | ||
</div> | ||
#end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,97 @@ | ||
package fitnesse.responders.account; | ||
|
||
import fitnesse.FitNesseContext; | ||
import fitnesse.Responder; | ||
import fitnesse.html.template.HtmlPage; | ||
import fitnesse.html.template.PageTitle; | ||
import fitnesse.http.Request; | ||
import fitnesse.http.Response; | ||
import fitnesse.http.SimpleResponse; | ||
import fitnesse.responders.NotFoundResponder; | ||
import fitnesse.wiki.MockingPageCrawler; | ||
import fitnesse.wiki.PageData; | ||
import fitnesse.wiki.PageCrawler; | ||
import fitnesse.wiki.PathParser; | ||
import fitnesse.wiki.WikiPage; | ||
import fitnesse.wiki.WikiPagePath; | ||
import org.apache.commons.lang3.StringUtils; | ||
import org.json.JSONArray; | ||
import org.json.JSONObject; | ||
|
||
import java.io.UnsupportedEncodingException; | ||
|
||
import static fitnesse.wiki.WikiPageProperty.*; | ||
|
||
public class AccountResponder implements Responder { | ||
private WikiPage page; | ||
public PageData pageData; | ||
private String resource; | ||
private WikiPagePath path; | ||
private SimpleResponse response; | ||
private HtmlPage html; | ||
|
||
@Override | ||
public Response makeResponse(FitNesseContext context, Request request) throws Exception { | ||
|
||
response = new SimpleResponse(); | ||
resource = request.getResource(); | ||
path = PathParser.parse(resource); | ||
PageCrawler crawler = context.getRootPage().getPageCrawler(); | ||
page = crawler.getPage(path, new MockingPageCrawler()); | ||
if (page == null) | ||
return new NotFoundResponder().makeResponse(context, request); | ||
|
||
pageData = page.getData(); | ||
makeContent(context, request); | ||
response.setMaxAge(0); | ||
return response; | ||
} | ||
|
||
private void makeContent(FitNesseContext context, Request request) throws UnsupportedEncodingException { | ||
if ("json".equals(request.getInput("format"))) { | ||
JSONObject jsonObject = makeJson(); | ||
response.setContent(jsonObject.toString(1)); | ||
} else { | ||
String html = makeHtml(context, request); | ||
response.setContent(html); | ||
} | ||
} | ||
|
||
private JSONObject makeJson() { | ||
response.setContentType(Response.Format.JSON); | ||
JSONObject jsonObject = new JSONObject(); | ||
if (pageData.hasAttribute(HELP)) { | ||
jsonObject.put(HELP, pageData.getAttribute(HELP)); | ||
} | ||
if (pageData.hasAttribute(SUITES)) { | ||
JSONArray tags = new JSONArray(); | ||
for (String tag : pageData.getAttribute(SUITES).split(",")) { | ||
if (StringUtils.isNotBlank(tag)) { | ||
tags.put(tag.trim()); | ||
} | ||
} | ||
jsonObject.put(SUITES, tags); | ||
} | ||
return jsonObject; | ||
} | ||
|
||
private String makeHtml(FitNesseContext context, Request request) { | ||
html = context.pageFactory.newPage(); | ||
html.setNavTemplate("viewNav"); | ||
html.put("viewLocation", request.getResource()); | ||
html.setTitle("Account: " + resource); | ||
|
||
String tags = ""; | ||
if (pageData != null) { | ||
tags = pageData.getAttribute(SUITES); | ||
} | ||
|
||
html.setPageTitle(new PageTitle("Account", path, tags)); | ||
html.put("pageData", pageData); | ||
html.setMainTemplate("accountPage"); | ||
|
||
return html.html(request); | ||
|
||
} | ||
|
||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,68 @@ | ||
package fitnesse.responders.account; | ||
|
||
import fitnesse.FitNesseContext; | ||
import fitnesse.authentication.Password; | ||
import fitnesse.http.Request; | ||
import fitnesse.http.Response; | ||
import fitnesse.http.SimpleResponse; | ||
import fitnesse.responders.BasicResponder; | ||
import fitnesse.responders.ErrorResponder; | ||
import org.apache.commons.lang3.StringUtils; | ||
|
||
public class SaveAccountResponder extends BasicResponder { | ||
@Override | ||
public Response makeResponse(FitNesseContext context, Request request) throws Exception { | ||
if (request.getAuthorizationUsername() == null) { | ||
return getResponse(context, "You have to be logged in to use this feature."); | ||
} | ||
Password password = new Password(); | ||
if (request.hasInput("changePassword")) { | ||
String currentPassword = StringUtils.trim(request.getInput("CurrentPasswordText")); | ||
String newPasswordText = StringUtils.trim(request.getInput("NewPasswordText")); | ||
String confirmPasswordText = StringUtils.trim(request.getInput("ConfirmPasswordText")); | ||
if (newPasswordText.isEmpty() || !newPasswordText.equals(confirmPasswordText)) { | ||
return getResponse(context, "Password should not be empty and they should match."); | ||
} | ||
if (!currentPassword.equals(request.getAuthorizationPassword())) { | ||
return getResponse(context, "Current password is incorrect."); | ||
} | ||
password.savePassword(request.getAuthorizationUsername(), newPasswordText); | ||
} else if ("admin".equals(request.getAuthorizationUsername())) { | ||
if (request.hasInput("createUser")) { | ||
String newUserNameText = StringUtils.trim(request.getInput("UserNameText")); | ||
String newUserPasswordText = StringUtils.trim(request.getInput("UserPasswordText")); | ||
if (newUserNameText.isEmpty() || newUserPasswordText.isEmpty()) { | ||
return getResponse(context, "Username or password field is empty."); | ||
} else if (password.doesUserExist(newUserNameText)) { | ||
return getResponse(context, "User already exists."); | ||
} | ||
password.savePassword(newUserNameText, newUserPasswordText); | ||
} else if (request.hasInput("deleteUser")) { | ||
String newUserNameText = StringUtils.trim(request.getInput("UserNameText")); | ||
if ("admin".equals(newUserNameText)) { | ||
return getResponse(context, "You cannot delete admin user."); | ||
} | ||
try { | ||
password.deletePassword(newUserNameText); | ||
} catch (Exception ex) { | ||
return getResponse(context, ex.getMessage()); | ||
} | ||
} else { | ||
return getResponse(context, "Invalid input to modify account."); | ||
} | ||
} else { | ||
return getResponse(context, "Only admin can create or delete users."); | ||
} | ||
|
||
Response response = new SimpleResponse(); | ||
response.redirect(context.contextRoot, request.getResource()); | ||
return response; | ||
} | ||
|
||
private static Response getResponse(FitNesseContext context, String message) throws Exception { | ||
Response response = new ErrorResponder(message).makeResponse(context, null); | ||
response.setStatus(412); | ||
return response; | ||
} | ||
|
||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.