sanitize env for processes, restructure log file
							parent
							
								
									dbb10b6e13
								
							
						
					
					
						commit
						a70ae91ce4
					
				| @ -0,0 +1,24 @@ | ||||
| package alfred.web.core.process | ||||
| 
 | ||||
| import alfred.web.core.build.BuildConfig | ||||
| import alfred.web.core.build.LogFile | ||||
| import org.springframework.stereotype.Service | ||||
| 
 | ||||
| @Service | ||||
| class ProcessEnvironment { | ||||
| 
 | ||||
|     fun forBuild( | ||||
|         config: BuildConfig, | ||||
|         logFile: LogFile, | ||||
|         rev: String?, | ||||
|         useEnv: MutableMap<String, String> = System.getenv() | ||||
|     ) = | ||||
|         useEnv.let { env -> | ||||
|             env.filter { it.key.contains("ALFRED") }.forEach { env.remove(it.key) } | ||||
|             env.putAll(config.env) | ||||
|             env["ALFRED_LOG_FILE"] = logFile.backingFile.absolutePath | ||||
|             env["ALFRED_REV"] = rev ?: "" | ||||
|             env | ||||
|         } | ||||
| 
 | ||||
| } | ||||
| @ -1,21 +1,23 @@ | ||||
| package alfred.web.core | ||||
| package alfred.web.core.process | ||||
| 
 | ||||
| import alfred.web.core.build.BuildConfig | ||||
| import alfred.web.core.build.BuildContext | ||||
| import alfred.web.core.build.LogFile | ||||
| import org.springframework.stereotype.Service | ||||
| import kotlin.apply | ||||
| 
 | ||||
| @Service | ||||
| class Processes { | ||||
| class Processes( | ||||
|     val env: ProcessEnvironment | ||||
| ) { | ||||
| 
 | ||||
|     fun builder(config: BuildConfig, logFile: LogFile, rev: String?): ProcessBuilder = | ||||
|         ProcessBuilder() | ||||
|             .redirectOutput(ProcessBuilder.Redirect.appendTo(logFile.backingFile)) | ||||
|             .redirectError(ProcessBuilder.Redirect.appendTo(logFile.backingFile)) | ||||
|             .apply { | ||||
|                 environment().putAll(config.env) | ||||
|                 environment()["ALFRED_LOG_FILE"] = logFile.backingFile.absolutePath | ||||
|                 environment()["ALFRED_REV"] = rev | ||||
|                 environment().clear() | ||||
|                 environment().putAll(env.forBuild(config, logFile, rev)) | ||||
|             } | ||||
| 
 | ||||
|     fun builder(ctx: BuildContext) = | ||||
| @ -0,0 +1,40 @@ | ||||
| package alfred.web.core.process | ||||
| 
 | ||||
| import alfred.web.core.build.BuildConfig | ||||
| import alfred.web.core.build.LogFile | ||||
| import org.junit.jupiter.api.Test | ||||
| import java.nio.file.Files | ||||
| import kotlin.test.assertEquals | ||||
| 
 | ||||
| class ProcessEnvironmentTest { | ||||
| 
 | ||||
|     @Test | ||||
|     fun `removes all previous ALFRED vars`(){ | ||||
|         val processEnvironment = ProcessEnvironment() | ||||
|         val cfg = BuildConfig( | ||||
|             user = "Gandalf", | ||||
|             apikey = "Mellon", | ||||
|             script = "", | ||||
|             gitRepo = "", | ||||
|             gitCloneTimeout = 0, | ||||
|             workspace = "", | ||||
|             mailReportTo = "", | ||||
|             env = mapOf( | ||||
|                 "ENV1" to "ENV-VAL-1" | ||||
|             ) | ||||
|         ) | ||||
|         val logFile = LogFile(Files.createTempFile("alfred-test", "").toFile()) | ||||
| 
 | ||||
|         val env = processEnvironment.forBuild( | ||||
|             config = cfg, | ||||
|             logFile = logFile, | ||||
|             rev = "", | ||||
|             useEnv = mutableMapOf( | ||||
|                 "ALFRED_TOP_SECRET" to "You-Don't-Know-Jack" | ||||
|             ) | ||||
|         ) | ||||
| 
 | ||||
|         assertEquals(setOf("ENV1", "ALFRED_LOG_FILE", "ALFRED_REV"), env.keys) | ||||
|     } | ||||
| 
 | ||||
| } | ||||
| @ -0,0 +1,18 @@ | ||||
| ALFRED_MAIL_HOST=testing.host | ||||
| ALFRED_MAIL_PORT=1337 | ||||
| ALFRED_MAIL_USERNAME=testing.username | ||||
| ALFRED_MAIL_PASSWORD=testing.password | ||||
| 
 | ||||
| ALFRED_HOME=/tmp/alfred | ||||
| ALFRED_PORT=8080 | ||||
| 
 | ||||
| server.port=${ALFRED_PORT} | ||||
| spring.application.name=Alfred - RCE AAS | ||||
| 
 | ||||
| spring.mail.host=${ALFRED_MAIL_HOST} | ||||
| spring.mail.port=${ALFRED_MAIL_PORT} | ||||
| spring.mail.username=${ALFRED_MAIL_USERNAME} | ||||
| spring.mail.password=${ALFRED_MAIL_PASSWORD} | ||||
| spring.mail.properties.mail.smtp.auth=${ALFRED_MAIL_SMTP_AUTH : true} | ||||
| spring.mail.properties.mail.smtp.starttls.enable=${ALFRED_MAIL_STARTTLS : true} | ||||
| ALFRED_MAIL_FROM=alfred@your.service | ||||
					Loading…
					
					
				
		Reference in New Issue
	
	 Josha von Gizycki
						Josha von Gizycki