Skip to content

Commit ccd4568

Browse files
Password decription filter
1 parent d1103c3 commit ccd4568

File tree

5 files changed

+53
-28
lines changed

5 files changed

+53
-28
lines changed

src/main/kotlin/com/neva/gradle/fork/config/Config.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ abstract class Config(val fork: ForkExtension, val name: String) {
8585
convention(project.layout.projectDirectory.dir("gradle/fork"))
8686
}
8787

88-
val templateEngine = TemplateEngine(project)
88+
val templateEngine = TemplateEngine(fork)
8989

9090
fun findTemplateFile(templateName: String): File? {
9191
val pebFile = templateDir.get().asFile.resolve("$templateName.peb")

src/main/kotlin/com/neva/gradle/fork/template/TemplateEngine.kt

Lines changed: 23 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,13 @@ package com.neva.gradle.fork.template
33
import com.mitchellbosecke.pebble.PebbleEngine
44
import com.mitchellbosecke.pebble.lexer.Syntax
55
import com.mitchellbosecke.pebble.loader.StringLoader
6-
import org.gradle.api.Project
6+
import com.neva.gradle.fork.ForkExtension
77
import java.io.StringWriter
88
import java.util.regex.Pattern
99

10-
class TemplateEngine(val project: Project) {
10+
class TemplateEngine(val fork: ForkExtension) {
11+
12+
private val project = fork.project
1113

1214
private val projectProperties by lazy {
1315
mapOf("prop" to project.properties)
@@ -25,10 +27,28 @@ class TemplateEngine(val project: Project) {
2527
mapOf("system" to result)
2628
}
2729

30+
private val engine by lazy {
31+
PebbleEngine.Builder()
32+
.extension(TemplateExtension(fork.props))
33+
.autoEscaping(false)
34+
.cacheActive(false)
35+
.strictVariables(true)
36+
.newLineTrimming(false)
37+
.loader(StringLoader())
38+
.syntax(
39+
Syntax.Builder()
40+
.setEnableNewLineTrimming(false)
41+
.setPrintOpenDelimiter(VAR_PREFIX)
42+
.setPrintCloseDelimiter(VAR_SUFFIX)
43+
.build()
44+
)
45+
.build()
46+
}
47+
2848
fun render(template: String, props: Map<String, Any?>): String {
2949
val effectiveProps = envProperties + systemProperties + projectProperties + props
3050
val renderer = StringWriter()
31-
ENGINE.getTemplate(template).evaluate(renderer, effectiveProps)
51+
engine.getTemplate(template).evaluate(renderer, effectiveProps)
3252

3353
return renderer.toString()
3454
}
@@ -60,20 +80,5 @@ class TemplateEngine(val project: Project) {
6080
private const val VAR_PREFIX = "{{"
6181

6282
private const val VAR_SUFFIX = "}}"
63-
64-
private val ENGINE = PebbleEngine.Builder()
65-
.extension(TemplateExtension())
66-
.autoEscaping(false)
67-
.cacheActive(false)
68-
.strictVariables(true)
69-
.newLineTrimming(false)
70-
.loader(StringLoader())
71-
.syntax(Syntax.Builder()
72-
.setEnableNewLineTrimming(false)
73-
.setPrintOpenDelimiter(VAR_PREFIX)
74-
.setPrintCloseDelimiter(VAR_SUFFIX)
75-
.build()
76-
)
77-
.build()
7883
}
7984
}

src/main/kotlin/com/neva/gradle/fork/template/TemplateExtension.kt

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,16 @@ package com.neva.gradle.fork.template
22

33
import com.mitchellbosecke.pebble.extension.AbstractExtension
44
import com.mitchellbosecke.pebble.extension.Filter
5+
import com.neva.gradle.fork.PropsExtension
6+
import com.neva.gradle.fork.template.filter.PasswordFilter
57
import com.neva.gradle.fork.template.filter.SubstituteFilter
68

7-
class TemplateExtension : AbstractExtension() {
9+
class TemplateExtension(val props: PropsExtension) : AbstractExtension() {
810

911
override fun getFilters(): MutableMap<String, Filter> {
1012
return mutableMapOf(
11-
"substitute" to SubstituteFilter()
13+
"substitute" to SubstituteFilter(),
14+
"password" to PasswordFilter(props)
1215
)
1316
}
1417
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package com.neva.gradle.fork.template.filter
2+
3+
import com.mitchellbosecke.pebble.extension.Filter
4+
import com.mitchellbosecke.pebble.template.EvaluationContext
5+
import com.mitchellbosecke.pebble.template.PebbleTemplate
6+
import com.neva.gradle.fork.PropsExtension
7+
8+
/**
9+
* Decrypts password on demand.
10+
*/
11+
class PasswordFilter(val props: PropsExtension) : Filter {
12+
override fun apply(input: Any, args: MutableMap<String, Any>, self: PebbleTemplate, context: EvaluationContext, lineNumber: Int): Any? {
13+
return if (input is String) {
14+
props.encryptor.decrypt(input)
15+
} else {
16+
null
17+
}
18+
}
19+
20+
override fun getArgumentNames(): List<String>? {
21+
return listOf()
22+
}
23+
}

src/main/kotlin/com/neva/gradle/fork/template/filter/SubstituteFilter.kt

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,7 @@ import org.apache.commons.lang3.StringUtils
99
* There is 'replace' filter in core but takes a map as argument.
1010
*/
1111
class SubstituteFilter : Filter {
12-
override fun apply(
13-
input: Any,
14-
args: MutableMap<String, Any>,
15-
self: PebbleTemplate,
16-
context: EvaluationContext,
17-
lineNumber: Int
18-
): Any? {
12+
override fun apply(input: Any, args: MutableMap<String, Any>, self: PebbleTemplate, context: EvaluationContext, lineNumber: Int): Any? {
1913
return if (input is String) {
2014
val search = args["search"] ?: throw IllegalArgumentException("No search argument passed to substitute filter.")
2115
val replace = args["replace"] ?: throw IllegalArgumentException("No replace argument passed to substitute filter.")

0 commit comments

Comments
 (0)