Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 17 additions & 25 deletions src/main/java/cat/udl/eps/softarch/fll/config/DBInitialization.java
Original file line number Diff line number Diff line change
@@ -1,12 +1,11 @@
package cat.udl.eps.softarch.fll.config;

import java.time.ZonedDateTime;
import java.util.Arrays;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import cat.udl.eps.softarch.fll.domain.Record;
import cat.udl.eps.softarch.fll.domain.Administrator;
import cat.udl.eps.softarch.fll.domain.User;
import cat.udl.eps.softarch.fll.repository.RecordRepository;
import cat.udl.eps.softarch.fll.repository.AdministratorRepository;
import cat.udl.eps.softarch.fll.repository.UserRepository;
import jakarta.annotation.PostConstruct;

Expand All @@ -18,41 +17,34 @@
@Value("${spring.profiles.active:}")
private String activeProfiles;

private final RecordRepository recordRepository;
private final UserRepository userRepository;
private final AdministratorRepository administratorRepository;

public DBInitialization(UserRepository userRepository, RecordRepository recordRepository) {
public DBInitialization(UserRepository userRepository, AdministratorRepository administratorRepository) {
this.userRepository = userRepository;
this.recordRepository = recordRepository;
this.administratorRepository = administratorRepository;
}

@PostConstruct
public void initializeDatabase() {
// Default user
if (!userRepository.existsById("demo")) {
User user = new User();
user.setEmail("demo@sample.app");
user.setId("demo");
user.setPassword(defaultPassword);
user.encodePassword();
userRepository.save(user);
// Default administrator
if (!administratorRepository.existsById("admin")) {
Administrator admin = new Administrator();
admin.setId("admin");
admin.setEmail("admin@sample.app");
admin.setPassword(defaultPassword);
admin.encodePassword();
administratorRepository.save(admin);
}
if (Arrays.asList(activeProfiles.split(",")).contains("test")) {
// Testing instances
if (!userRepository.existsById("test")) {
if (!userRepository.existsById("demo")) {

Check warning on line 41 in src/main/java/cat/udl/eps/softarch/fll/config/DBInitialization.java

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Merge this if statement with the enclosing one.

See more on https://sonarcloud.io/project/issues?id=UdL-EPS-SoftArch-Igualada_first-lego-league-backend&issues=AZz3QU6omZOt0ZT42dXf&open=AZz3QU6omZOt0ZT42dXf&pullRequest=120
User user = new User();
user.setEmail("test@sample.app");
user.setId("test");
user.setEmail("demo@sample.app");
user.setId("demo");
user.setPassword(defaultPassword);
user.encodePassword();
user = userRepository.save(user);
cat.udl.eps.softarch.fll.domain.Record record = new Record();
record.setName("My test record");
record.setDescription("A record used for testing purposes, nothing more, nothing less...");
record.setCreated(ZonedDateTime.now());
record.setModified(record.getCreated());
record.setOwner(user);
recordRepository.save(record);
userRepository.save(user);
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,12 +30,11 @@
.requestMatchers(HttpMethod.GET, "/users").authenticated()
.requestMatchers(HttpMethod.GET, "/editions/*/volunteers").authenticated()
.requestMatchers(HttpMethod.POST, "/users").anonymous()
.requestMatchers(HttpMethod.POST, "/matchResults/register").authenticated()
.requestMatchers(HttpMethod.POST, "/users/*").denyAll()
.requestMatchers(HttpMethod.POST, "/*/*").authenticated()
.requestMatchers(HttpMethod.PUT, "/*/*").authenticated()
.requestMatchers(HttpMethod.PATCH, "/*/*").authenticated()
.requestMatchers(HttpMethod.DELETE, "/*/*").authenticated()
.requestMatchers(HttpMethod.POST, "/**").hasRole("ADMIN")

Check failure on line 34 in src/main/java/cat/udl/eps/softarch/fll/config/WebSecurityConfig.java

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Define a constant instead of duplicating this literal "ADMIN" 4 times.

See more on https://sonarcloud.io/project/issues?id=UdL-EPS-SoftArch-Igualada_first-lego-league-backend&issues=AZz3QU2RmZOt0ZT42dXe&open=AZz3QU2RmZOt0ZT42dXe&pullRequest=120
.requestMatchers(HttpMethod.PUT, "/**").hasRole("ADMIN")
.requestMatchers(HttpMethod.PATCH, "/**").hasRole("ADMIN")
.requestMatchers(HttpMethod.DELETE, "/**").hasRole("ADMIN")
.anyRequest().permitAll())
.csrf(csrf -> csrf.disable())
.sessionManagement(session -> session.sessionCreationPolicy(SessionCreationPolicy.STATELESS))
Expand Down
25 changes: 25 additions & 0 deletions src/main/java/cat/udl/eps/softarch/fll/domain/Administrator.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package cat.udl.eps.softarch.fll.domain;

import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonValue;
import jakarta.persistence.Entity;
import jakarta.persistence.Table;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.AuthorityUtils;
import java.util.Collection;

@Entity
@Table(name = "administrators")
@Data
@EqualsAndHashCode(callSuper = true)
public class Administrator extends User {

@Override
@JsonValue(value = false)
@JsonProperty(access = JsonProperty.Access.READ_ONLY)
public Collection<? extends GrantedAuthority> getAuthorities() {
return AuthorityUtils.commaSeparatedStringToAuthorityList("ROLE_ADMIN");
}
}
46 changes: 0 additions & 46 deletions src/main/java/cat/udl/eps/softarch/fll/domain/Record.java

This file was deleted.

3 changes: 3 additions & 0 deletions src/main/java/cat/udl/eps/softarch/fll/domain/User.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.persistence.Inheritance;
import jakarta.persistence.InheritanceType;
import jakarta.persistence.Table;
import jakarta.validation.constraints.Email;
import jakarta.validation.constraints.NotBlank;
Expand All @@ -20,6 +22,7 @@

@Entity
@Table(name = "users") // Avoid collision with system table "user"
@Inheritance(strategy = InheritanceType.JOINED)
@Data
@EqualsAndHashCode(callSuper = true)
public class User extends UriEntity<String> implements UserDetails {
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package cat.udl.eps.softarch.fll.repository;

import java.util.List;
import org.springframework.data.repository.CrudRepository;
import org.springframework.data.repository.PagingAndSortingRepository;
import org.springframework.data.repository.query.Param;
import org.springframework.data.rest.core.annotation.RepositoryRestResource;
import cat.udl.eps.softarch.fll.domain.Administrator;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;

@Tag(name = "Administrators", description = "Repository for managing Administrator entities")
@RepositoryRestResource
public interface AdministratorRepository
extends CrudRepository<Administrator, String>, PagingAndSortingRepository<Administrator, String> {

@Operation(summary = "Search administrators by username",
description = "Returns a list of Administrators whose usernames contain the specified text.")
List<Administrator> findByIdContaining(@Param("text") String text);
}

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package cat.udl.eps.softarch.fll.steps;

import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;
import org.springframework.http.MediaType;
import io.cucumber.java.en.When;

public class AdminAccessControlStepDefs {
private final StepDefs stepDefs;

public AdminAccessControlStepDefs(StepDefs stepDefs) {
this.stepDefs = stepDefs;
}

@When("I retrieve the editions list")
public void iRetrieveTheEditionsList() throws Exception {
stepDefs.result = stepDefs.mockMvc.perform(
get("/editions")
.accept(MediaType.APPLICATION_JSON)
.with(AuthenticationStepDefs.authenticate()))
.andDo(print());
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package cat.udl.eps.softarch.fll.steps;

import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.user;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
Expand Down Expand Up @@ -48,7 +47,7 @@ private ResultActions performAssignCoach(String teamId, Integer coachId) throws
.content("{\"teamId\":\"" + teamId + "\",\"coachId\":" + coachId + "}")
.characterEncoding(StandardCharsets.UTF_8)
.accept(MediaType.APPLICATION_JSON)
.with(user("testuser").roles("COACH"))
.with(AuthenticationStepDefs.authenticate())
);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import org.springframework.test.web.servlet.request.RequestPostProcessor;
import io.cucumber.java.Before;
import io.cucumber.java.en.Given;
import io.cucumber.java.en.Then;

public class AuthenticationStepDefs {

Expand Down Expand Up @@ -32,4 +33,9 @@ public void iLoginAsWithPassword(String username, String password) {
public void iMNotLoggedIn() {
currentUsername = currentPassword = null;
}

@Then("^I logout$")
public void iLogout() {
currentUsername = currentPassword = null;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
import cat.udl.eps.softarch.fll.repository.MatchRepository;
import com.fasterxml.jackson.databind.JsonNode;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.httpBasic;
import io.cucumber.java.en.And;
import io.cucumber.java.en.Given;
import io.cucumber.java.en.When;
Expand Down Expand Up @@ -43,7 +44,7 @@ public void theDependenciesExist() throws Throwable {
.contentType(MediaType.APPLICATION_JSON)
.content(editionJson.toString())
.characterEncoding(StandardCharsets.UTF_8)
.with(AuthenticationStepDefs.authenticate())).andReturn().getResponse();
.with(httpBasic("admin", "password"))).andReturn().getResponse();

if (edRes.getStatus() != 201 || edRes.getHeader("Location") == null) {
throw new RuntimeException("ERROR CREANT EDITION: " + edRes.getContentAsString());
Expand All @@ -60,7 +61,7 @@ public void theDependenciesExist() throws Throwable {
.contentType(MediaType.APPLICATION_JSON)
.content(teamJson.toString())
.characterEncoding(StandardCharsets.UTF_8)
.with(AuthenticationStepDefs.authenticate())).andReturn().getResponse();
.with(httpBasic("admin", "password"))).andReturn().getResponse();

if (teamRes.getStatus() != 201 || teamRes.getHeader("Location") == null) {
throw new RuntimeException("ERROR CREANT TEAM: " + teamRes.getContentAsString());
Expand Down Expand Up @@ -151,7 +152,7 @@ public void aTeamExistsWithNameAndAnAward(String teamName, String awardName) thr
.contentType(MediaType.APPLICATION_JSON)
.content(editionJson.toString())
.characterEncoding(StandardCharsets.UTF_8)
.with(AuthenticationStepDefs.authenticate())).andReturn().getResponse();
.with(httpBasic("admin", "password"))).andReturn().getResponse();
if (edRes.getStatus() != 201 || edRes.getHeader("Location") == null) {
throw new RuntimeException("Failed to create edition: " + edRes.getContentAsString());
}
Expand All @@ -167,7 +168,7 @@ public void aTeamExistsWithNameAndAnAward(String teamName, String awardName) thr
.contentType(MediaType.APPLICATION_JSON)
.content(teamJson.toString())
.characterEncoding(StandardCharsets.UTF_8)
.with(AuthenticationStepDefs.authenticate())).andReturn().getResponse();
.with(httpBasic("admin", "password"))).andReturn().getResponse();
if (teamRes.getStatus() != 201 || teamRes.getHeader("Location") == null) {
throw new RuntimeException("Failed to create team: " + teamRes.getContentAsString());
}
Expand All @@ -182,7 +183,7 @@ public void aTeamExistsWithNameAndAnAward(String teamName, String awardName) thr
.contentType(MediaType.APPLICATION_JSON)
.content(awardJson.toString())
.characterEncoding(StandardCharsets.UTF_8)
.with(AuthenticationStepDefs.authenticate()));
.with(httpBasic("admin", "password")));
}

@When("I search awards by winner name containing {string}")
Expand Down
Loading
Loading