Create a REST endpoint using Groovy Scriptrunner

Abyakta Lenka July 8, 2017

I am trying to create a rest endpoint using Groovy Scriptrunner , need help.

my groovy code is adding user from a customfield to a group.

how to make it as a REST endpoint so that i can call it externally as a JIRA rest api

import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.issue.Issue
import com.atlassian.jira.security.groups.GroupManager
import com.atlassian.jira.user.ApplicationUser

@BaseScript CustomEndpointDelegate delegate

addUserToGroup(httpMethod: "PUT", groups: ["jira-administrators"]) { MultivaluedMap queryParams, String body, HttpServletRequest request ->


GroupManager groupManager = ComponentAccessor.getGroupManager();
try
    {
    groupManager.addUserToGroup(((ApplicationUser) issue.getCustomFieldValue(ComponentAccessor.getCustomFieldManager().getCustomFieldObjectByName("ABCD"))).getDirectoryUser() , groupManager.getGroup("Group"))
    } catch (NullPointerException e){ }

 

 

1 answer

1 accepted

0 votes
Answer accepted
Daniel Yelamos [Adaptavist]
Rising Star
Rising Star
Rising Stars are recognized for providing high-quality answers to other users. Rising Stars receive a certificate of achievement and are on the path to becoming Community Leaders.
July 10, 2017

Hello Abyakta.

I already answered your request in our service desk, but I think this is a very good example to place here, so I'm going to repost this.

This is a REST GET endpoint that will successfully add a user to the group "jira-administrators"

import com.atlassian.jira.component.ComponentAccessor
import com.onresolve.scriptrunner.runner.rest.common.CustomEndpointDelegate
import groovy.json.JsonBuilder
import groovy.transform.BaseScript

import javax.servlet.http.HttpServletRequest
import javax.ws.rs.core.Response

@BaseScript CustomEndpointDelegate delegate

addUserToJiraAdmins(httpMethod: "GET") { queryParams, body, HttpServletRequest request ->
    def userName = request.getParameter("userName")
    if (userName) {

        def groupManager = ComponentAccessor.getGroupManager()
        def jiraUserManager = ComponentAccessor.getUserManager()

        def user = jiraUserManager.getUserByName(userName)
        if(!user){
            return Response.noContent().build()
        }

        def group = groupManager.getGroup("jira-administrators")

        groupManager.addUserToGroup(user, group)

        return Response.ok(new JsonBuilder([user: userName, group: "jira-administrators"]).toString()).build()
    }
    else
        return Response.noContent().build()
}

You would test that this works by simply typing in your browser:

jiraBaseURL/rest/scriptrunner/latest/custom/addUserToJiraAdmins/?userName=YOURUSER

Please bear in mind that I made this as a REST request only so that you can test that it works right away, the best way of doing this would be following the REST conventions and use a PUT request, instead of a GET. 

You should also give our REST endpoint doco a look for further reference.

Regards,

Daniel

Abyakta Lenka July 13, 2017

Thanks Daniel for the help. But the above Code can be run by any one . can i make it only for Admins .

 

 

Abyakta Lenka July 15, 2017

Found it how to restrict it to specific group .

Marc October 26, 2017

Hi Abyakta,

 

How did you solve this eventually, I'm quite interested?

 

Regards,

Marc

Suggest an answer

Log in or Sign up to answer