Compare commits
3 Commits
356013b149
...
f7d81a2fb8
| Author | SHA1 | Date |
|---|---|---|
|
|
f7d81a2fb8 | 2 years ago |
|
|
a872e66d63 | 2 years ago |
|
|
92c2d33e70 | 2 years ago |
@ -0,0 +1,39 @@
|
|||||||
|
package space.kklochko.spring_rest_example.db.repositories;
|
||||||
|
|
||||||
|
import jakarta.persistence.EntityManager;
|
||||||
|
import jakarta.persistence.NoResultException;
|
||||||
|
import jakarta.persistence.TypedQuery;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
import space.kklochko.spring_rest_example.db.repositories.blocks.TransactionalInsert;
|
||||||
|
import space.kklochko.spring_rest_example.db.repositories.blocks.TransactionalRemove;
|
||||||
|
import space.kklochko.spring_rest_example.db.repositories.blocks.TransactionalUpdate;
|
||||||
|
import space.kklochko.spring_rest_example.models.Token;
|
||||||
|
import space.kklochko.spring_rest_example.models.User;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Optional;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
@Component
|
||||||
|
public class UserRepository {
|
||||||
|
public User read(String username) {
|
||||||
|
Optional<User> user = readAll()
|
||||||
|
.stream()
|
||||||
|
.filter(u -> u.getUsername().equals(username))
|
||||||
|
.findFirst();
|
||||||
|
|
||||||
|
return user.orElse(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<User> readAll() {
|
||||||
|
List<User> users = new ArrayList<>();
|
||||||
|
|
||||||
|
// password same as username
|
||||||
|
users.add(new User("admin", "ADMIN", "8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918"));
|
||||||
|
users.add(new User("user", "USER", "04f8996da763b7a969b1028ee3007569eaf3a635486ddab211d512c85b9df8fb"));
|
||||||
|
|
||||||
|
return users;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@ -0,0 +1,19 @@
|
|||||||
|
package space.kklochko.spring_rest_example.models;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
@AllArgsConstructor
|
||||||
|
@Data
|
||||||
|
public class User {
|
||||||
|
private String username;
|
||||||
|
private String role;
|
||||||
|
private String password;
|
||||||
|
|
||||||
|
public User() {
|
||||||
|
setUsername("");
|
||||||
|
setRole("");
|
||||||
|
setPassword("");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@ -0,0 +1,8 @@
|
|||||||
|
package space.kklochko.spring_rest_example.security.hashes;
|
||||||
|
|
||||||
|
public class Sha256Hash {
|
||||||
|
public String hashOf(String input) {
|
||||||
|
return org.apache.commons.codec.digest.DigestUtils.sha256Hex(input);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@ -1,8 +1,10 @@
|
|||||||
package space.kklochko.spring_rest_example.security.tokens;
|
package space.kklochko.spring_rest_example.security.tokens;
|
||||||
|
|
||||||
|
import space.kklochko.spring_rest_example.security.hashes.Sha256Hash;
|
||||||
|
|
||||||
public class SimpleToken extends StringTokenFactory {
|
public class SimpleToken extends StringTokenFactory {
|
||||||
public String create(String input) {
|
public String create(String input) {
|
||||||
return org.apache.commons.codec.digest.DigestUtils.sha256Hex(input);
|
return (new Sha256Hash()).hashOf(input);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -0,0 +1,59 @@
|
|||||||
|
package space.kklochko.spring_rest_example.db.repositories
|
||||||
|
|
||||||
|
import groovy.sql.Sql
|
||||||
|
import jakarta.persistence.EntityManager
|
||||||
|
import space.kklochko.spring_rest_example.config.factories.LoadDataBaseConfigFromEnvFile
|
||||||
|
import space.kklochko.spring_rest_example.config.models.DataBaseConfig
|
||||||
|
import space.kklochko.spring_rest_example.db.factories.DataBaseConnection
|
||||||
|
import space.kklochko.spring_rest_example.db.factories.EntityManagerConnection
|
||||||
|
import space.kklochko.spring_rest_example.models.Token
|
||||||
|
import space.kklochko.spring_rest_example.models.User
|
||||||
|
import spock.lang.Shared
|
||||||
|
import spock.lang.Specification
|
||||||
|
import spock.lang.Stepwise
|
||||||
|
import spock.lang.Subject
|
||||||
|
|
||||||
|
@Stepwise
|
||||||
|
class UserRepositorySpec extends Specification {
|
||||||
|
def "Read one user"() {
|
||||||
|
given: "I have a repo"
|
||||||
|
@Subject
|
||||||
|
UserRepository repo = new UserRepository()
|
||||||
|
|
||||||
|
when: "reading the entry"
|
||||||
|
def result = repo.read(username)
|
||||||
|
|
||||||
|
then: "checking that the reading was successful"
|
||||||
|
result
|
||||||
|
|
||||||
|
and: "the user has a role"
|
||||||
|
with(result) {
|
||||||
|
getRole() == expectedRole
|
||||||
|
getPassword() == expectedPassword
|
||||||
|
}
|
||||||
|
|
||||||
|
where: "the expected data"
|
||||||
|
username || expectedRole | expectedPassword
|
||||||
|
"admin" || "ADMIN" | "8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918"
|
||||||
|
"user" || "USER" | "04f8996da763b7a969b1028ee3007569eaf3a635486ddab211d512c85b9df8fb"
|
||||||
|
}
|
||||||
|
|
||||||
|
def "Read one user and check if exists"() {
|
||||||
|
given: "I have a repo"
|
||||||
|
@Subject
|
||||||
|
UserRepository repo = new UserRepository()
|
||||||
|
|
||||||
|
when: "reading the entry"
|
||||||
|
def result = repo.read(username)
|
||||||
|
|
||||||
|
then: "checking that the reading was successful"
|
||||||
|
isNull == (result == null)
|
||||||
|
|
||||||
|
where: "the expected data"
|
||||||
|
username || isNull
|
||||||
|
"admin" || false
|
||||||
|
"user" || false
|
||||||
|
"user2" || true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@ -0,0 +1,27 @@
|
|||||||
|
package space.kklochko.spring_rest_example.security.hashes
|
||||||
|
|
||||||
|
|
||||||
|
import spock.lang.Specification;
|
||||||
|
import spock.lang.Subject;
|
||||||
|
|
||||||
|
public class Sha256HashSpec extends Specification {
|
||||||
|
def "Create a token that based on sha256"() {
|
||||||
|
given: "I have a hasher"
|
||||||
|
@Subject
|
||||||
|
def hasher = new Sha256Hash()
|
||||||
|
|
||||||
|
when: "I get a hash of a string"
|
||||||
|
String hash = hasher.hashOf(input)
|
||||||
|
|
||||||
|
then: "The token is the same if the same input data."
|
||||||
|
expectedHash == hash
|
||||||
|
|
||||||
|
where: "I have the expected data"
|
||||||
|
input || expectedHash
|
||||||
|
"abc" || "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad"
|
||||||
|
"random numbers232341" || "7f4b80b2b09ae4326f78b1a9782c807af0a7d0194bffb05602a6585466b4c43e"
|
||||||
|
"admin" || "8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918"
|
||||||
|
"user" || "04f8996da763b7a969b1028ee3007569eaf3a635486ddab211d512c85b9df8fb"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Loading…
Reference in new issue