Hello everyone,
i want to store some Data in PluginSettings and want to access it in my own Plugin. I can't seem to save my HashMap and ending in an StackOverflow.
import ...
public class XXX {
private static PluginSettingsFactory pluginSettingsFactory = null;
public XXX () {
this.pluginSettingsFactory = pluginSettingsFactory;
}
public void set(Object value){
pluginSettingsFactory.createGlobalSettings().put("xxx", value);
}
public static HashMap<String, List> readTrustedIsser(List<String> validIssuerEndpoints){
HashMap<String, List> validations = new HashMap<>();
List<PublicKey> validKeys = new ArrayList<>();
List<String> validIssuers = new ArrayList<>();
List<String> validKids = new ArrayList<>();
for(String issuer : validIssuerEndpoints)
{
JSONObject openIdConfig = getJSONHttp(issuer);
String jwks_uri = openIdConfig.getString("jwks_uri");
validIssuers.add(openIdConfig.getString("issuer"));
JSONArray jwks_keys = getJSONHttp(jwks_uri).getJSONArray("keys");
for(Object jwks_key : jwks_keys)
{
JSONObject jsonkey = (JSONObject) jwks_key;
PublicKey pub = getPublicKey(jsonkey.getString("n"), jsonkey.getString("e"));
validKeys.add(pub);
validKids.add(jsonkey.getString("kid"));
}
}
validations.put("keys", validKeys);
validations.put("issuers", validIssuers);
validations.put("kids", validKids);
return validations;
}
public static JSONObject getJSONHttp(String uri) throws Exception
{
JSONObject json = new JSONObject();
CloseableHttpResponse responseGet = HttpClients.createDefault().execute(new HttpGet(uri));
if(responseGet.getStatusLine().getStatusCode() == 200)
{
String reponseStr = EntityUtils.toString(responseGet.getEntity());
json = new JSONObject(reponseStr);
}
return json;
}
public static PublicKey getPublicKey(String MODULUS, String EXPONENT) throws Exception
{
byte[] nb = base64UrlDecodeToBytes(MODULUS);
byte[] eb = base64UrlDecodeToBytes(EXPONENT);
BigInteger n = new BigInteger(1, nb);
BigInteger e = new BigInteger(1, eb);
RSAPublicKeySpec rsaPublicKeySpec = new RSAPublicKeySpec(n, e);
PublicKey publicKey = KeyFactory.getInstance("RSA").generatePublic(rsaPublicKeySpec);
return publicKey;
}
public static byte[] base64UrlDecodeToBytes(String input)
{
Base64 decoder = new Base64(-1, null, true);
return decoder.decode(input);
}
public static HashMap<String, List> doIt(){
final List<String> validIssuerEndpoints = Arrays.asList(
"link1",
"link2",
"link3",
"link4");
return readTrustedIsser(validIssuerEndpoints);
}
public static void main(String[] args) {
XXX x = new XXX();
HashMap<String, List> aa = x.doIt();
x.set(aa);
}
}
My HashMap has the correct data in it, my problem is the PluginSettingsFactory.
I think it's a simple problem, but I can't seem to find the root cause. Anyone with an idea? Thanks!
For anyone with that problem, i found the solution.
@WithPlugin('com.atlassian.confluence.plugins.confluence-sal-plugin')
@PluginModule
PluginSettingsFactory pluginSettingsFactory;
PluginSettings pluginSettings = pluginSettingsFactory.createGlobalSettings();
Important to use the lines with @, needed some tome to find that out.
For Jira Server, replace with
@WithPlugin('com.atlassian.sal.jira')
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.