在哪里放入Stash插件的.p12文件?

时间:2016-02-17 16:33:36

标签: java google-api google-oauth bitbucket-server atlassian-plugin-sdk

所以我试图写一个Stash post receive hook插件,最终将一些相关信息写入Google电子表格。 为此,我必须从.p12文件中提取Oauth2身份验证的私钥。我做了几个测试项目,这些项目只是普通的Java命令行应用程序,我只是在根目录中输出.p12文件并从那里调用它。我创建了另一个我将从资源文件夹中调用它的方法,并且工作正常。

我移植了代码,让我所有的依赖关系安定下来并运行它。我天真地删除了根目录中的.p12文件,显然找不到文件未找到异常。看了一下目标目录,看到它从未带过来,重新调整并将它放在资源文件夹中,看看是否会结转。另一个文件未找到异常但仍未在目标目录中。我试着把它放在几个不同的地方只是为了看它是否会被带过来。到目前为止,没有任何工作。

我在这里做错了什么?

我想我可以将文件放在我的Stash实例上并从那里调用它,但我宁愿把它自己包含在插件中。

我经常搜索,但没有找到真正相关的东西。有人有什么建议吗?

1 个答案:

答案 0 :(得分:0)

如果有其他人看到这个,并想知道我是如何解决它的... Atlassian开发人员向我指出,我的主要问题是我只是将.p12文件放在根资源目录中。一旦我将它放入其自己的文件夹中,它就像一个魅力。我的最终代码是让所有这一切工作(在其他Stack Overflow问题的帮助下)

String sheetURL = "XXXXXX@XXXXXX-XXXX.iam.gserviceaccount.com";
HttpTransport httpTransport = new NetHttpTransport();
JacksonFactory jsonFactory = new JacksonFactory();
String[] SCOPESArray = {"https://spreadsheets.google.com/feeds", "https://spreadsheets.google.com/feeds/spreadsheets/private/full", "https://docs.google.com/feeds"};

final List SCOPES = Arrays.asList(SCOPESArray);
GoogleCredential credential = null;
InputStream stream = null;
File tempFile = null;

try {
    stream = this.getClass().getClassLoader().getResourceAsStream("authentication/key.p12");
    tempFile = File.createTempFile("temp", "temp");
    IOUtils.copy(stream, new FileOutputStream(tempFile));
}
catch (IOException e) {
    print(e.toString());
}
finally {
    if (stream != null) {
        IOUtils.closeQuietly(stream);
    }
}

credential = new GoogleCredential.Builder()
    .setTransport(httpTransport)
    .setJsonFactory(jsonFactory)
    .setServiceAccountId(sheetURL)
    .setServiceAccountScopes(SCOPES)
    .setServiceAccountPrivateKeyFromP12File(tempFile) 
    .build();