Fix NPE
[teamcity/git-plugin.git] / git-agent / src / jetbrains / buildServer / buildTriggers / vcs / git / agent / command / ScriptGen.java
1 /*
2  * Copyright 2000-2014 JetBrains s.r.o.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 package jetbrains.buildServer.buildTriggers.vcs.git.agent.command;
18
19 import com.intellij.openapi.util.io.StreamUtil;
20 import jetbrains.buildServer.agent.ClasspathUtil;
21 import jetbrains.buildServer.buildTriggers.vcs.git.AuthSettings;
22 import jetbrains.buildServer.buildTriggers.vcs.git.agent.CredentialsHelper;
23 import jetbrains.buildServer.util.FileUtil;
24 import org.jetbrains.annotations.NotNull;
25
26 import java.io.*;
27
28 public abstract class ScriptGen {
29
30   protected final File myTempDir;
31
32   public ScriptGen(@NotNull File tempDir) {
33     myTempDir = tempDir;
34   }
35
36   @NotNull
37   public abstract File generateAskPass(@NotNull AuthSettings authSettings) throws IOException;
38
39
40   @NotNull
41   public File generateCredentialsHelper() throws IOException {
42     String template = getCredHelperTemplate();
43     String extension = "";
44     int idx = template.lastIndexOf(".");
45     if (idx != -1)
46       extension = template.substring(idx, template.length());
47
48     File result = FileUtil.createTempFile(myTempDir, "credHelper", extension, true);
49     PrintWriter out = null;
50     try {
51       out = new PrintWriter(new FileWriter(result));
52
53       InputStream templateStream = ScriptGen.class.getResourceAsStream(template);
54       if (templateStream == null)
55         throw new IOException("Cannot read script template " + template);
56       String script = StreamUtil.readText(templateStream);
57       script = script.replace("{CREDENTIALS_SCRIPT}", result.getCanonicalPath());
58       script = script.replace("{CREDENTIALS_CLASSPATH}", ClasspathUtil.composeClasspath(new Class[]{CredentialsHelper.class}, null, null));
59       script = script.replace("{CREDENTIALS_CLASS}", CredentialsHelper.class.getName());
60       String[] lines = script.split("(\r\n|\r|\n)");
61       for (String line : lines) {
62         out.println(line);
63       }
64       if (!result.setExecutable(true))
65         throw new IOException("Cannot make credentialsHelper script executable");
66     } catch (IOException e) {
67       FileUtil.delete(result);
68       throw e;
69     } finally {
70       if (out != null)
71         out.close();
72     }
73     return result;
74   }
75
76
77   @NotNull
78   protected abstract String getCredHelperTemplate();
79 }