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.BuildConfig | ||||||
| import alfred.web.core.build.BuildContext | import alfred.web.core.build.BuildContext | ||||||
| import alfred.web.core.build.LogFile | import alfred.web.core.build.LogFile | ||||||
| import org.springframework.stereotype.Service | import org.springframework.stereotype.Service | ||||||
|  | import kotlin.apply | ||||||
| 
 | 
 | ||||||
| @Service | @Service | ||||||
| class Processes { | class Processes( | ||||||
|  |     val env: ProcessEnvironment | ||||||
|  | ) { | ||||||
| 
 | 
 | ||||||
|     fun builder(config: BuildConfig, logFile: LogFile, rev: String?): ProcessBuilder = |     fun builder(config: BuildConfig, logFile: LogFile, rev: String?): ProcessBuilder = | ||||||
|         ProcessBuilder() |         ProcessBuilder() | ||||||
|             .redirectOutput(ProcessBuilder.Redirect.appendTo(logFile.backingFile)) |             .redirectOutput(ProcessBuilder.Redirect.appendTo(logFile.backingFile)) | ||||||
|             .redirectError(ProcessBuilder.Redirect.appendTo(logFile.backingFile)) |             .redirectError(ProcessBuilder.Redirect.appendTo(logFile.backingFile)) | ||||||
|             .apply { |             .apply { | ||||||
|                 environment().putAll(config.env) |                 environment().clear() | ||||||
|                 environment()["ALFRED_LOG_FILE"] = logFile.backingFile.absolutePath |                 environment().putAll(env.forBuild(config, logFile, rev)) | ||||||
|                 environment()["ALFRED_REV"] = rev |  | ||||||
|             } |             } | ||||||
| 
 | 
 | ||||||
|     fun builder(ctx: BuildContext) = |     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