Skip to content

Commit

Permalink
⚗️ : use data classes for teams
Browse files Browse the repository at this point in the history
  • Loading branch information
juwit committed Sep 24, 2019
1 parent ce6b7b1 commit 36c0408
Show file tree
Hide file tree
Showing 35 changed files with 147 additions and 224 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@
import io.codeka.gaia.modules.repository.TerraformModuleRepository;
import io.codeka.gaia.stacks.bo.StackState;
import io.codeka.gaia.stacks.repository.StackRepository;
import io.codeka.gaia.teams.bo.Team;
import io.codeka.gaia.teams.bo.User;
import io.codeka.gaia.teams.Team;
import io.codeka.gaia.teams.User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
Expand Down
4 changes: 2 additions & 2 deletions src/main/java/io/codeka/gaia/modules/bo/TerraformModule.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package io.codeka.gaia.modules.bo;

import io.codeka.gaia.teams.bo.Team;
import io.codeka.gaia.teams.bo.User;
import io.codeka.gaia.teams.Team;
import io.codeka.gaia.teams.User;
import org.springframework.data.mongodb.core.mapping.DBRef;

import javax.validation.Valid;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,4 +67,5 @@ public String getValidationRegex() {
public void setValidationRegex(String validationRegex) {
this.validationRegex = validationRegex;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import io.codeka.gaia.modules.bo.TerraformModule;
import io.codeka.gaia.modules.repository.TerraformModuleRepository;
import io.codeka.gaia.teams.bo.User;
import io.codeka.gaia.teams.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.annotation.Secured;
import org.springframework.web.bind.annotation.*;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import io.codeka.gaia.modules.bo.TerraformModule;
import io.codeka.gaia.modules.repository.TerraformModuleGitRepository;
import io.codeka.gaia.modules.repository.TerraformModuleRepository;
import io.codeka.gaia.teams.bo.User;
import io.codeka.gaia.teams.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.security.access.annotation.Secured;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package io.codeka.gaia.modules.repository;

import io.codeka.gaia.modules.bo.TerraformModule;
import io.codeka.gaia.teams.bo.Team;
import io.codeka.gaia.teams.Team;
import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.stereotype.Repository;

Expand Down
2 changes: 1 addition & 1 deletion src/main/java/io/codeka/gaia/stacks/bo/Job.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package io.codeka.gaia.stacks.bo;

import io.codeka.gaia.teams.bo.User;
import io.codeka.gaia.teams.User;
import org.springframework.data.mongodb.core.mapping.DBRef;
import org.springframework.util.CollectionUtils;

Expand Down
4 changes: 2 additions & 2 deletions src/main/java/io/codeka/gaia/stacks/bo/Stack.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package io.codeka.gaia.stacks.bo;

import io.codeka.gaia.teams.bo.Team;
import io.codeka.gaia.teams.bo.User;
import io.codeka.gaia.teams.Team;
import io.codeka.gaia.teams.User;
import org.springframework.data.mongodb.core.mapping.DBRef;

import javax.validation.constraints.NotBlank;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
import io.codeka.gaia.stacks.bo.JobType;
import io.codeka.gaia.stacks.repository.JobRepository;
import io.codeka.gaia.stacks.repository.StackRepository;
import io.codeka.gaia.teams.bo.User;
import io.codeka.gaia.teams.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@
import io.codeka.gaia.stacks.bo.Stack;
import io.codeka.gaia.stacks.repository.StackRepository;
import io.codeka.gaia.stacks.service.StackCostCalculator;
import io.codeka.gaia.teams.bo.Team;
import io.codeka.gaia.teams.bo.User;
import io.codeka.gaia.teams.Team;
import io.codeka.gaia.teams.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.*;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import io.codeka.gaia.stacks.bo.Stack;
import io.codeka.gaia.stacks.bo.StackState;
import io.codeka.gaia.teams.bo.Team;
import io.codeka.gaia.teams.Team;
import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.stereotype.Repository;

Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package io.codeka.gaia.stacks.service

import io.codeka.gaia.modules.repository.TerraformModuleRepository
import io.codeka.gaia.stacks.bo.MandatoryStackVariablesValidation
import io.codeka.gaia.stacks.bo.Stack
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.data.repository.findByIdOrNull
import org.springframework.stereotype.Service
import javax.validation.ConstraintValidator
import javax.validation.ConstraintValidatorContext

@Service
class MandatoryStackVariablesValidator(@Autowired val moduleRepository: TerraformModuleRepository)
: ConstraintValidator<MandatoryStackVariablesValidation, Stack> {

override fun isValid(stack: Stack, constraintValidatorContext: ConstraintValidatorContext?): Boolean {
// we do not validate anything if the stacks has no module reference (it will send a BadRequest anyway)
if (stack.moduleId.isNullOrBlank()) {
return true
}
// getting the module, returning true if module cannot be found !
// this should (let's hope so) never happen ! another validator should handle this case
val module = this.moduleRepository.findByIdOrNull(stack.moduleId) ?: return true

return module.variables.filter { it.isMandatory }
.all { ! stack.variableValues[it.name].isNullOrBlank() }
}
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
package io.codeka.gaia.stacks.service

import io.codeka.gaia.modules.bo.TerraformVariable
import io.codeka.gaia.modules.repository.TerraformModuleRepository
import io.codeka.gaia.stacks.bo.RegexStackVariablesValidation
import io.codeka.gaia.stacks.bo.Stack
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.data.repository.findByIdOrNull
import org.springframework.stereotype.Service
import java.util.regex.Pattern
import javax.validation.ConstraintValidator
import javax.validation.ConstraintValidatorContext

@Service
class RegexStackVariablesValidator(@Autowired val moduleRepository: TerraformModuleRepository)
: ConstraintValidator<RegexStackVariablesValidation, Stack> {

override fun isValid(stack: Stack, constraintValidatorContext: ConstraintValidatorContext?): Boolean {
// we do not validate anything if the stacks has no module reference (it will send a BadRequest anyway)
if( stack.moduleId.isNullOrBlank()) {
return true
}
// getting the module, returning true if module cannot be found !
// this should (let's hope so) never happen ! another validator should handle this case
val module = this.moduleRepository.findByIdOrNull(stack.moduleId) ?: return true

return module.variables
// not checking non regex values
.filter { ! it.validationRegex.isNullOrBlank() }
// not checking blank values (doing it first because Pair want non-null values)
.filter { ! stack.variableValues[it.name].isNullOrBlank() }
// validate the pattern (using non null assert as variable value is not more null here)
.all { it.validateWithPattern(stack.variableValues[it.name]!!) }
}
}

private fun TerraformVariable.validateWithPattern(value: String): Boolean {
val pattern = Pattern.compile(this.validationRegex)
return pattern.matcher(value).matches()
}
20 changes: 20 additions & 0 deletions src/main/java/io/codeka/gaia/teams/bo.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package io.codeka.gaia.teams

import org.springframework.data.annotation.Id
import org.springframework.data.mongodb.core.mapping.DBRef

/**
* A Gaia Team, which groups users
*/
data class Team(val id: String?)

/**
* a Gaia user, which has granted access to modules
*/
data class User(
@Id val username: String,
@DBRef val team: Team?) {

val isAdmin: Boolean
get() = "admin" == this.username
}
21 changes: 0 additions & 21 deletions src/main/java/io/codeka/gaia/teams/bo/Team.java

This file was deleted.

39 changes: 0 additions & 39 deletions src/main/java/io/codeka/gaia/teams/bo/User.java

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package io.codeka.gaia.teams.controller;

import io.codeka.gaia.teams.bo.Team;
import io.codeka.gaia.teams.Team;
import io.codeka.gaia.teams.repository.TeamRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.annotation.Secured;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package io.codeka.gaia.teams.controller;

import io.codeka.gaia.teams.bo.Team;
import io.codeka.gaia.teams.bo.User;
import io.codeka.gaia.teams.Team;
import io.codeka.gaia.teams.User;
import io.codeka.gaia.teams.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.Authentication;
Expand All @@ -22,7 +22,7 @@ public User user(Authentication authentication){
}
if (! userRepository.existsById(authentication.getName())){
// creating user
var user = new User(authentication.getName());
var user = new User(authentication.getName(), null);
userRepository.save(user);
return user;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package io.codeka.gaia.teams.controller;

import io.codeka.gaia.teams.bo.User;
import io.codeka.gaia.teams.User;
import io.codeka.gaia.teams.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.annotation.Secured;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package io.codeka.gaia.teams.repository;

import io.codeka.gaia.teams.bo.Team;
import io.codeka.gaia.teams.Team;
import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.stereotype.Repository;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package io.codeka.gaia.teams.repository;

import io.codeka.gaia.teams.bo.User;
import io.codeka.gaia.teams.User;
import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.stereotype.Repository;

Expand Down

0 comments on commit 36c0408

Please sign in to comment.