Skip to content

Commit

Permalink
Dev: Add abstract TestAuthDirectory class
Browse files Browse the repository at this point in the history
Signed-off-by: Simon Bennetts <[email protected]>
  • Loading branch information
psiinon committed Sep 1, 2023
1 parent 8a4828f commit 51b113a
Show file tree
Hide file tree
Showing 12 changed files with 76 additions and 277 deletions.
1 change: 1 addition & 0 deletions addOns/dev/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).

### Changed
- Update minimum ZAP version to 2.13.0.
- Added TestAuthDirectory abstract class to reduce duplicated code.

## [0.2.0] - 2023-05-09

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
/*
* Zed Attack Proxy (ZAP) and its related class files.
*
* ZAP is an HTTP/HTTPS proxy for assessing web application security.
*
* Copyright 2023 The ZAP Development Team
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.zaproxy.addon.dev;

import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.lang.RandomStringUtils;

/** A test directory which uses authentication. */
public abstract class TestAuthDirectory extends TestDirectory {

// These are test credentials, so hardcoding them is fine ;)
private static final String[][] USERS = {{"[email protected]", "password123"}};

private Map<String, String> sessions = new HashMap<>();

public TestAuthDirectory(TestProxyServer server, String name) {
super(server, name);
}

public boolean isValid(String username, String password) {
return Arrays.stream(USERS)
.filter(c -> (c[0].equals(username) && c[1].equals(password)))
.findAny()
.isPresent();
}

public String getToken(String username) {
String token = RandomStringUtils.randomAlphanumeric(32);
sessions.put(token, username);
return token;
}

public String getUser(String token) {
return sessions.get(token);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,23 +19,17 @@
*/
package org.zaproxy.addon.dev.auth.jsonMultipleCookies;

import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.lang.RandomStringUtils;
import org.zaproxy.addon.dev.TestDirectory;
import org.zaproxy.addon.dev.TestAuthDirectory;
import org.zaproxy.addon.dev.TestProxyServer;

/**
* A login page which uses one JSON request to login endpoint. The token is returned in a standard
* field but is submitted with the "Bearer" prefix and in a cookie.
*/
public class JsonMultipleCookiesDir extends TestDirectory {

// These are test credentials, so hardcoding them is fine ;)
private static final String[][] USERS = {{"[email protected]", "password123"}};

private Map<String, String> sessions = new HashMap<>();
public class JsonMultipleCookiesDir extends TestAuthDirectory {

private Map<String, String> tempTokens = new HashMap<>();

Expand All @@ -46,29 +40,12 @@ public JsonMultipleCookiesDir(TestProxyServer server, String name) {
this.addPage(new JsonMultipleCookiesVerificationPage(server));
}

public boolean isValid(String username, String password) {
return Arrays.stream(USERS)
.filter(c -> (c[0].equals(username) && c[1].equals(password)))
.findAny()
.isPresent();
}

public String getToken(String username) {
String token = RandomStringUtils.randomAlphanumeric(32);
sessions.put(token, username);
return token;
}

public String getTempToken(String username) {
String token = RandomStringUtils.randomAlphanumeric(32);
tempTokens.put(token, username);
return token;
}

public String getUser(String token) {
return sessions.get(token);
}

public String getTempUser(String token) {
return tempTokens.get(token);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,44 +19,18 @@
*/
package org.zaproxy.addon.dev.auth.nonStdJsonBearer;

import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.lang.RandomStringUtils;
import org.zaproxy.addon.dev.TestDirectory;
import org.zaproxy.addon.dev.TestAuthDirectory;
import org.zaproxy.addon.dev.TestProxyServer;

/**
* A login page which uses one JSON request to login endpoint. The token is returned in a non
* standard JSON field.
*/
public class NonStdJsonBearerDir extends TestDirectory {

// These are test credentials, so hardcoding them is fine ;)
private static final String[][] USERS = {{"[email protected]", "password123"}};

private Map<String, String> sessions = new HashMap<>();
public class NonStdJsonBearerDir extends TestAuthDirectory {

public NonStdJsonBearerDir(TestProxyServer server, String name) {
super(server, name);
this.addPage(new NonStdJsonBearerLoginPage(server));
this.addPage(new NonStdJsonBearerVerificationPage(server));
}

public boolean isValid(String username, String password) {
return Arrays.stream(USERS)
.filter(c -> (c[0].equals(username) && c[1].equals(password)))
.findAny()
.isPresent();
}

public String getToken(String username) {
String token = RandomStringUtils.randomAlphanumeric(32);
sessions.put(token, username);
return token;
}

public String getUser(String token) {
return sessions.get(token);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,44 +19,18 @@
*/
package org.zaproxy.addon.dev.auth.passswordAddedNoSubmit;

import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.lang.RandomStringUtils;
import org.zaproxy.addon.dev.TestDirectory;
import org.zaproxy.addon.dev.TestAuthDirectory;
import org.zaproxy.addon.dev.TestProxyServer;

/**
* A login page which uses one JSON request to login endpoint. The token is returned in a standard
* field. The submit key does not work so buttons have to be pressed.
*/
public class PasswordAddedNoSubmitDir extends TestDirectory {

// These are test credentials, so hardcoding them is fine ;)
private static final String[][] USERS = {{"[email protected]", "password123"}};

private Map<String, String> sessions = new HashMap<>();
public class PasswordAddedNoSubmitDir extends TestAuthDirectory {

public PasswordAddedNoSubmitDir(TestProxyServer server, String name) {
super(server, name);
this.addPage(new PasswordAddedNoSubmitLoginPage(server));
this.addPage(new PasswordAddedNoSubmitVerificationPage(server));
}

public boolean isValid(String username, String password) {
return Arrays.stream(USERS)
.filter(c -> (c[0].equals(username) && c[1].equals(password)))
.findAny()
.isPresent();
}

public String getToken(String username) {
String token = RandomStringUtils.randomAlphanumeric(32);
sessions.put(token, username);
return token;
}

public String getUser(String token) {
return sessions.get(token);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,44 +19,18 @@
*/
package org.zaproxy.addon.dev.auth.passwordAddedJson;

import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.lang.RandomStringUtils;
import org.zaproxy.addon.dev.TestDirectory;
import org.zaproxy.addon.dev.TestAuthDirectory;
import org.zaproxy.addon.dev.TestProxyServer;

/**
* A login page which uses one JSON request to login endpoint. The token is returned in a standard
* field.
*/
public class PasswordAddedJsonDir extends TestDirectory {

// These are test credentials, so hardcoding them is fine ;)
private static final String[][] USERS = {{"[email protected]", "password123"}};

private Map<String, String> sessions = new HashMap<>();
public class PasswordAddedJsonDir extends TestAuthDirectory {

public PasswordAddedJsonDir(TestProxyServer server, String name) {
super(server, name);
this.addPage(new PasswordAddedJsonLoginPage(server));
this.addPage(new PasswordAddedJsonVerificationPage(server));
}

public boolean isValid(String username, String password) {
return Arrays.stream(USERS)
.filter(c -> (c[0].equals(username) && c[1].equals(password)))
.findAny()
.isPresent();
}

public String getToken(String username) {
String token = RandomStringUtils.randomAlphanumeric(32);
sessions.put(token, username);
return token;
}

public String getUser(String token) {
return sessions.get(token);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,44 +19,18 @@
*/
package org.zaproxy.addon.dev.auth.passwordHiddenJson;

import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.lang.RandomStringUtils;
import org.zaproxy.addon.dev.TestDirectory;
import org.zaproxy.addon.dev.TestAuthDirectory;
import org.zaproxy.addon.dev.TestProxyServer;

/**
* A login page which uses one JSON request to login endpoint. The token is returned in a standard
* field.
*/
public class PasswordHiddenJsonDir extends TestDirectory {

// These are test credentials, so hardcoding them is fine ;)
private static final String[][] USERS = {{"[email protected]", "password123"}};

private Map<String, String> sessions = new HashMap<>();
public class PasswordHiddenJsonDir extends TestAuthDirectory {

public PasswordHiddenJsonDir(TestProxyServer server, String name) {
super(server, name);
this.addPage(new PasswordHiddenJsonLoginPage(server));
this.addPage(new PasswordHiddenJsonVerificationPage(server));
}

public boolean isValid(String username, String password) {
return Arrays.stream(USERS)
.filter(c -> (c[0].equals(username) && c[1].equals(password)))
.findAny()
.isPresent();
}

public String getToken(String username) {
String token = RandomStringUtils.randomAlphanumeric(32);
sessions.put(token, username);
return token;
}

public String getUser(String token) {
return sessions.get(token);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,45 +19,19 @@
*/
package org.zaproxy.addon.dev.auth.passwordNewPage;

import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.lang.RandomStringUtils;
import org.zaproxy.addon.dev.TestDirectory;
import org.zaproxy.addon.dev.TestAuthDirectory;
import org.zaproxy.addon.dev.TestProxyServer;

/**
* A login page which uses one JSON request to login endpoint. The token is returned in a standard
* field.
*/
public class PasswordNewPageDir extends TestDirectory {

// These are test credentials, so hardcoding them is fine ;)
private static final String[][] USERS = {{"[email protected]", "password123"}};

private Map<String, String> sessions = new HashMap<>();
public class PasswordNewPageDir extends TestAuthDirectory {

public PasswordNewPageDir(TestProxyServer server, String name) {
super(server, name);
this.addPage(new PasswordNewPageLoginPage(server));
this.addPage(new PasswordNewPageNextPage(server));
this.addPage(new PasswordNewPageVerificationPage(server));
}

public boolean isValid(String username, String password) {
return Arrays.stream(USERS)
.filter(c -> (c[0].equals(username) && c[1].equals(password)))
.findAny()
.isPresent();
}

public String getToken(String username) {
String token = RandomStringUtils.randomAlphanumeric(32);
sessions.put(token, username);
return token;
}

public String getUser(String token) {
return sessions.get(token);
}
}
Loading

0 comments on commit 51b113a

Please sign in to comment.