Like what you see? Have a play with our trial version.

Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Code Block
languagejava
titleJava
collapsetrue
package rest.code.examples;
import java.io.IOException;
import java.util.Random;
import org.apache.hc.client5.http.fluent.Content;
import org.apache.hc.client5.http.fluent.Request;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
/**
 * Create a user using the Yellowfin REST API
 */
public class CreateUserGroup {
    public static void main(String[] args) throws Exception {

        String host = "http://localhost:8080/Yellowfin";
        String restUsername = "admin@yellowfin.com.au";
        String restPassword = "test";

        String newGroupName = "New Group";
        String newGroupDescription = "This is a new group";

        String token = generateToken(host, restUsername, restPassword);

        String createGroupPayload =
                "{" +
                        "  \"groupName\": \"" + newGroupName + "\"," +
                        "  \"groupDescription\": \"" + newGroupDescription + "\"," +
                        "  \"groupStatus\": \"OPEN\"," +
                        "  \"isSecureGroup\": \"false\" " +
                        "}";

        System.out.println("Payload: " + createGroupPayload);

        Content c = Request.post(host + "/api/user-groups")
                .addHeader("Authorization", "YELLOWFIN ts=" + System.currentTimeMillis() + " , nonce=" + new Random().nextLong() + ", token=" + token)
                .addHeader("Accept", "application/vnd.yellowfin.api-v1+json")
                .addHeader("Content-Type", "application/json")
                .bodyString(createGroupPayload, null)
                .execute().returnContent();

        System.out.print(c.asString());

    }



    /*
     *  This function generates an access token for a user that will grant them access to
     *  call REST API endpoints.
     */

    public static String generateToken(String host, String username, String password) throws IOException {

        Content c = Request.post(host + "/api/refresh-tokens")
                .addHeader("Authorization", "YELLOWFIN ts=" + System.currentTimeMillis() + " , nonce=" + new Random().nextLong())
                .addHeader("Accept", "application/vnd.yellowfin.api-v1+json")
                .addHeader("Content-Type", "application/json")
                .bodyString("{ \"userName\": \""+ username + "\",\"password\": \""+ password + "\"}", null)
                .execute().returnContent();

        JsonObject jsonObject = new JsonParser().parse(c.asString()).getAsJsonObject();
        JsonElement accessToken = jsonObject.getAsJsonObject("_embedded").getAsJsonObject("accessToken").get("securityToken");

        if (accessToken!=null) {
            System.out.println("Access Token: " + accessToken);
        } else {
            System.out.println("Token not retrieved successfully");
            System.exit(-1);
        }
        return accessToken.getAsString();

    }

}
Code Block
languagec#
titleC#
collapsetrue
using System.Net.Http.Headers;
using Newtonsoft.Json.Linq;

namespace rest.code.examples
{
    public class CreateUserGroup
    {
        static async Task Main(string[] args)
        {
            string host = "http://localhost:8080/Yellowfin";
            string restUsername = "admin@yellowfin.com.au";
            string restPassword = "test";

            string newGroupName = "New Group";
            string newGroupDescription = "This is a new group";

            string token = await GenerateToken(host, restUsername, restPassword);

            string createGroupPayload = "{" +
                    "  \"groupName\": \"" + newGroupName + "\"," +
                    "  \"groupDescription\": \"" + newGroupDescription + "\"," +
                    "  \"groupStatus\": \"OPEN\"," +
                    "  \"isSecureGroup\": \"false\" " +
                    "}";

            Console.WriteLine("Payload: " + createGroupPayload);

            using (var httpClient = new HttpClient())
            {
                httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("YELLOWFIN", "ts=" + DateTimeOffset.UtcNow.ToUnixTimeMilliseconds() + " , nonce=" + new Random().NextInt64() + ", token=" + token);
                httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/vnd.yellowfin.api-v1+json"));
                var content = new StringContent(createGroupPayload);
                content.Headers.ContentType = new MediaTypeHeaderValue("application/json");

                var response = await httpClient.PostAsync(host + "/api/user-groups", content);
                if (response.IsSuccessStatusCode)
                {
                    string responseBody = await response.Content.ReadAsStringAsync();
                    Console.WriteLine(responseBody);
                }
                else
                {
                    Console.WriteLine("Failed to create user group. Status code: " + response.StatusCode);
                }
            }
        }

        static async Task<string> GenerateToken(string host, string restUsername, string restPassword)
        {
            using (var client = new HttpClient())
            {
                // Generate nonce
                long nonce = new Random().NextInt64();

                // Create HTTP request
                var request = new HttpRequestMessage(HttpMethod.Post, host + "/api/refresh-tokens");
                request.Headers.Add("Authorization", "YELLOWFIN ts=" + DateTimeOffset.UtcNow.ToUnixTimeMilliseconds() + ", nonce=" + nonce);
                request.Headers.Add("Accept", "application/vnd.yellowfin.api-v1+json");
                request.Content = new StringContent(
                    $"{{\"userName\": \"{restUsername}\", \"password\": \"{restPassword}\"}}",
                    System.Text.Encoding.UTF8,
                    "application/json"
                );

                // Send request and get response
                HttpResponseMessage response = await client.SendAsync(request);
                string responseContent = await response.Content.ReadAsStringAsync();

                // Parse JSON response
                JObject jsonObject = JObject.Parse(responseContent);
                string accessToken = jsonObject["_embedded"]["accessToken"]["securityToken"].ToString();

                if (!string.IsNullOrEmpty(accessToken))
                {
                    Console.WriteLine("Access Token: " + accessToken);
                }
                else
                {
                    Console.WriteLine("Token not retrieved successfully");
                    Environment.Exit(-1);
                }

                return accessToken;
            }
        }
    }
}
Code Block
titleGo
collapsetrue
package main

import (
    "bytes"
    "encoding/json"
    "fmt"
    "io/ioutil"
    "math/rand"
    "net/http"
    "time"
)

func main() {
	host := "http://localhost:8080/Yellowfin"
    restUsername := "admin@yellowfin.com.au"
    restPassword := "test"

    newGroupName := "New Group"
    newGroupDescription := "This is a new group"

    token, err := generateToken(host, restUsername, restPassword)
	if err != nil {
		fmt.Println("Error generating token:", err)
		return
	}

	createGroupPayload := fmt.Sprintf(`{
        "groupName": "%s",
        "groupDescription": "%s",
        "groupStatus": "OPEN",
        "isSecureGroup": "false"
    }`, newGroupName, newGroupDescription)

	fmt.Println("Payload:", createGroupPayload)

	client := &http.Client{}
	req, err := http.NewRequest("POST", host+"/api/user-groups", bytes.NewBufferString(createGroupPayload))
	if err != nil {
		fmt.Println("Error creating request:", err)
		return
	}

	nonce := rand.Int63()

	req.Header.Set("Authorization", fmt.Sprintf("YELLOWFIN ts=%d, nonce=%d, token=%s", time.Now().UnixMilli(), nonce, token))
	req.Header.Set("Accept", "application/vnd.yellowfin.api-v1+json")
	req.Header.Set("Content-Type", "application/json")

	resp, err := client.Do(req)
	if err != nil {
		fmt.Println("Error sending request:", err)
		return
	}
	defer resp.Body.Close()

	body, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		fmt.Println("Error reading response body:", err)
		return
	}

	fmt.Println(string(body))
}

func generateToken(host, restUsername, restPassword string) (string, error) {
	// Generate nonce
	nonce := rand.Int63()

	// Create request body
	requestBody, err := json.Marshal(map[string]string{
        "userName": restUsername,
        "password": restPassword,
	})
	if err != nil {
		fmt.Println("Error marshaling request body:", err)
		return "", err
	}

	// Create HTTP client
	client := &http.Client{}

	// Create HTTP request
	request, err := http.NewRequest("POST", host+"/api/refresh-tokens", bytes.NewBuffer(requestBody))
	if err != nil {
		fmt.Println("Error creating request:", err)
		return "", err
	}

	// Add request headers
	request.Header.Set("Authorization", fmt.Sprintf("YELLOWFIN ts=%d, nonce=%d", time.Now().UnixMilli(), nonce))
	request.Header.Set("Accept", "application/vnd.yellowfin.api-v1+json")
	request.Header.Set("Content-Type", "application/json")

	// Send HTTP request
	response, err := client.Do(request)
	if err != nil {
		fmt.Println("Error sending request:", err)
		return "", err
	}
	defer response.Body.Close()

	// Read response body
	responseBody, err := ioutil.ReadAll(response.Body)
	if err != nil {
		fmt.Println("Error reading response body:", err)
		return "", err
	}

	// Parse JSON response
	var jsonResponse map[string]interface{}
	err = json.Unmarshal(responseBody, &jsonResponse)
	if err != nil {
		fmt.Println("Error parsing JSON response:", err)
		return "", err
	}

	// Get access token from response
	accessToken, ok := jsonResponse["_embedded"].(map[string]interface{})["accessToken"].(map[string]interface{})["securityToken"].(string)
	if !ok {
		fmt.Println("Token not retrieved")
		return "", fmt.Errorf("Token not retrieved successfully")
	}

	return accessToken, nil
}

...

Code Block
languagepy
titlePython
collapsetrue
import json
import random
import time

import requests

def main():
    host = "http://localhost:8080/Yellowfin"
    rest_username = "admin@yellowfin.com.au"
    rest_password = "test"

    new_group_name = "New Group"
    new_group_description = "This is a new group"

    try:
        token = generate_token(host, rest_username, rest_password)

        create_group_payload = (
            "{"
            f"  \"groupName\": \"{new_group_name}\","
            f"  \"groupDescription\": \"{new_group_description}\","
            "  \"groupStatus\": \"OPEN\","
            "  \"isSecureGroup\": \"false\""
            "}"
        )

        print("Payload:", create_group_payload)

        nonce = random.randint(0, 2 ** 63 - 1)
        headers = {
            'Authorization': f'YELLOWFIN ts={int(time.time() * 1000)}, nonce={nonce}, token={token}',
            'Accept': 'application/vnd.yellowfin.api-v1+json',
            'Content-Type': 'application/json'
        }

        response = requests.post(host + "/api/user-groups", headers=headers, data=create_group_payload)
        response.raise_for_status()
        print(response.text)
    except Exception as e:
        print(f"Error: {e}")

def generate_token(host, rest_username, rest_password):
    nonce = random.randint(0, 2 ** 63 - 1)

    request_body = json.dumps({
        "userName": rest_username,
        "password": rest_password
    })

    headers = {
        'Authorization': f'YELLOWFIN ts={int(time.time() * 1000)}, nonce={nonce}',
        'Accept': 'application/vnd.yellowfin.api-v1+json',
        'Content-Type': 'application/json'
    }

    response = requests.post(host + "/api/refresh-tokens", headers=headers, data=request_body)
    response.raise_for_status()

    json_response = response.json()
    access_token = json_response["_embedded"]["accessToken"]["securityToken"]
    print("Access Token:", access_token)

    return access_token

if __name__ == "__main__":
    main()

...

Code Block
languagejava
titleJava
collapsetrue
package rest.code.examples;
import java.io.IOException;
import java.util.Random;
import org.apache.hc.client5.http.fluent.Content;
import org.apache.hc.client5.http.fluent.Request;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
/**
 * Create a user using the Yellowfin REST API
 */
public class AddMemberToGroup {
    public static void main(String[] args) throws Exception {

        String host = "http://localhost:8080/Yellowfin";
        String restUsername = "admin@yellowfin.com.au";
        String restPassword = "test";

        String userGroupToAddUserTo = "New Group";
        String usernameOfUserToAdd = "user1@yellowfin.com.au";

        String token = generateToken(host, restUsername, restPassword);

        Integer userIpId = retrieveUserIpIdForUsername(host, token, usernameOfUserToAdd);

        Integer groupId = retrieveGroupIpIdForGroupName(host, token, userGroupToAddUserTo);

        String groupMembersPayload =
                "[\n"
                        + "    {\n"
                        + "    \"entityType\": \"PERSON\",\n"
                        + "    \"entityId\": " +  userIpId + ",\n"
                        + "    \"membershipType\": \"INCLUDED\"\n"
                        + "    }\n"
                        + "]";

        System.out.println("UserIpId: " + userIpId);
        System.out.println("GroupId: " + groupId);
        System.out.println("Payload: " + groupMembersPayload);

        Content c = Request.post(host + "/api/user-groups/" + groupId + "/members")
                .addHeader("Authorization", "YELLOWFIN ts=" + System.currentTimeMillis() + " , nonce=" + new Random().nextLong() + ", token=" + token)
                .addHeader("Accept", "application/vnd.yellowfin.api-v1+json")
                .addHeader("Content-Type", "application/json")
                .bodyString(groupMembersPayload, null)
                .execute().returnContent();

        System.out.println("User " + usernameOfUserToAdd +  " added to group " + userGroupToAddUserTo + " successfully");
        System.out.println("Response: " + c.asString());

    }

    public static Integer retrieveGroupIpIdForGroupName(String host, String token, String groupName) throws IOException {

        Content c = Request.get(host + "/api/user-groups")
                .addHeader("Authorization", "YELLOWFIN ts=" + System.currentTimeMillis() + " , nonce=" + new Random().nextLong() + ", token=" + token)
                .addHeader("Accept", "application/vnd.yellowfin.api-v1+json")
                .addHeader("Content-Type", "application/json")
                .execute().returnContent();

        JsonObject jsonObject = new JsonParser().parse(c.asString()).getAsJsonObject();
        JsonElement groupList = jsonObject.get("items");
        JsonArray groups = groupList.getAsJsonArray();

        for (int i=0; i < groups.size(); i++ ) {
            JsonObject group = groups.getAsJsonArray().get(i).getAsJsonObject();
            if (groupName.equals(group.get("shortDescription").getAsString())) return group.get("userGroupId").getAsInt();
        }

        System.out.println("Group could not be found for name:" + groupName);
        System.exit(-1);

        return null;
    }

    public static Integer retrieveUserIpIdForUsername(String host, String token, String userName) throws IOException {

        Content c = Request.get(host + "/api/rpc/users/user-details-by-username/" + userName)
                .addHeader("Authorization", "YELLOWFIN ts=" + System.currentTimeMillis() + " , nonce=" + new Random().nextLong()+ ", token=" + token)
                .addHeader("Accept", "application/vnd.yellowfin.api-v1+json")
                .addHeader("Content-Type", "application/json")
                .execute().returnContent();

        JsonObject jsonObject = new JsonParser().parse(c.asString()).getAsJsonObject();
        JsonElement userIpJsonAttribute = jsonObject.get("userId");
        Integer userIpId = userIpJsonAttribute.getAsInt();

        return userIpId;

    }


    /*
     *  This function generates an access token for a user that will grant them access to
     *  call REST API endpoints.
     */

    public static String generateToken(String host, String username, String password) throws IOException {

        Content c = Request.post(host + "/api/refresh-tokens")
                .addHeader("Authorization", "YELLOWFIN ts=" + System.currentTimeMillis() + " , nonce=" + new Random().nextLong())
                .addHeader("Accept", "application/vnd.yellowfin.api-v1+json")
                .addHeader("Content-Type", "application/json")
                .bodyString("{ \"userName\": \""+ username + "\",\"password\": \""+ password + "\"}", null)
                .execute().returnContent();

        JsonObject jsonObject = new JsonParser().parse(c.asString()).getAsJsonObject();
        JsonElement accessToken = jsonObject.getAsJsonObject("_embedded").getAsJsonObject("accessToken").get("securityToken");

        if (accessToken!=null) {
            System.out.println("Access Token: " + accessToken);
        } else {
            System.out.println("Token not retrieved successfully");
            System.exit(-1);
        }
        return accessToken.getAsString();

    }

}

...

Code Block
languagejava
titleJava
collapsetrue
package rest.code.examples;
import java.io.IOException;
import java.util.Random;
import org.apache.hc.client5.http.fluent.Content;
import org.apache.hc.client5.http.fluent.Request;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
/**
 * Remove users from a User Group using the Yellowfin REST API
 */
public class RemoveMemberFromGroup {
    public static void main(String[] args) throws Exception {

        System.out.println("Remove User from Group");

        String host = "http://localhost:8080/Yellowfin";
        String restUsername = "admin@yellowfin.com.au";
        String restPassword = "test";

        String userGroupToAddRemoveUserFrom = "New Group";
        String usernameOfUserToRemove = "user1@yellowfin.com.au";

        String token = generateToken(host, restUsername, restPassword);

        Integer userIpId = retrieveUserIpIdForUsername(host, token, usernameOfUserToRemove);

        Integer groupId = retrieveGroupIpIdForGroupName(host, token, userGroupToAddRemoveUserFrom);

        // The pipe "|" symbol is URL escaped in the following line.
        String groupMembersPayload = "memberIds=%5B'PERSON%7C"+  userIpId + "'%5D";

        System.out.println("UserIpId: " + userIpId);
        System.out.println("GroupId: " + groupId);
        System.out.println("Payload: " + groupMembersPayload);

        Content c = Request.delete(host + "/api/user-groups/" + groupId + "/members/?" + groupMembersPayload)
                .addHeader("Authorization", "YELLOWFIN ts=" + System.currentTimeMillis() + " , nonce=" + new Random().nextLong() + ", token=" + token)
                .addHeader("Accept", "application/vnd.yellowfin.api-v1+json")
                .addHeader("Content-Type", "application/json")
                .execute().returnContent();

        System.out.println("User " + usernameOfUserToRemove +  " removed from group " + userGroupToAddRemoveUserFrom + " successfully");
        System.out.println("Response: " + c.asString());

    }

    public static Integer retrieveGroupIpIdForGroupName(String host, String token, String groupName) throws IOException {

        Content c = Request.get(host + "/api/user-groups")
                .addHeader("Authorization", "YELLOWFIN ts=" + System.currentTimeMillis() + " , nonce=" + new Random().nextLong() + ", token=" + token)
                .addHeader("Accept", "application/vnd.yellowfin.api-v1+json")
                .addHeader("Content-Type", "application/json")
                .execute().returnContent();

        JsonObject jsonObject = new JsonParser().parse(c.asString()).getAsJsonObject();
        JsonElement groupList = jsonObject.get("items");
        JsonArray groups = groupList.getAsJsonArray();

        for (int i=0; i < groups.size(); i++ ) {
            JsonObject group = groups.getAsJsonArray().get(i).getAsJsonObject();
            if (groupName.equals(group.get("shortDescription").getAsString())) return group.get("userGroupId").getAsInt();
        }

        System.out.println("Group could not be found for name:" + groupName);
        System.exit(-1);

        return null;
    }

    public static Integer retrieveUserIpIdForUsername(String host, String token, String userName) throws IOException {

        Content c = Request.get(host + "/api/rpc/users/user-details-by-username/" + userName)
                .addHeader("Authorization", "YELLOWFIN ts=" + System.currentTimeMillis() + " , nonce=" + new Random().nextLong()+ ", token=" + token)
                .addHeader("Accept", "application/vnd.yellowfin.api-v1+json")
                .addHeader("Content-Type", "application/json")
                .execute().returnContent();

        JsonObject jsonObject = new JsonParser().parse(c.asString()).getAsJsonObject();
        JsonElement userIpJsonAttribute = jsonObject.get("userId");
        Integer userIpId = userIpJsonAttribute.getAsInt();

        return userIpId;

    }


    /*
     *  This function generates an access token for a user that will grant them access to
     *  call REST API endpoints.
     */

    public static String generateToken(String host, String username, String password) throws IOException {

        Content c = Request.post(host + "/api/refresh-tokens")
                .addHeader("Authorization", "YELLOWFIN ts=" + System.currentTimeMillis() + " , nonce=" + new Random().nextLong())
                .addHeader("Accept", "application/vnd.yellowfin.api-v1+json")
                .addHeader("Content-Type", "application/json")
                .bodyString("{ \"userName\": \""+ username + "\",\"password\": \""+ password + "\"}", null)
                .execute().returnContent();

        JsonObject jsonObject = new JsonParser().parse(c.asString()).getAsJsonObject();
        JsonElement accessToken = jsonObject.getAsJsonObject("_embedded").getAsJsonObject("accessToken").get("securityToken");

        if (accessToken!=null) {
            System.out.println("Access Token: " + accessToken);
        } else {
            System.out.println("Token not retrieved successfully");
            System.exit(-1);
        }
        return accessToken.getAsString();

    }

}

...

Code Block
languagejava
titleJava
collapsetrue
package rest.code.examples;
import java.io.IOException;
import java.util.Random;
import org.apache.hc.client5.http.fluent.Content;
import org.apache.hc.client5.http.fluent.Request;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
/**
 * Create a user using the Yellowfin REST API
 */
public class ListGroupMembers {
    public static void main(String[] args) throws Exception {

        System.out.println("List Group Member Components");

        String host = "http://localhost:8080/Yellowfin";
        String restUsername = "admin@yellowfin.com.au";
        String restPassword = "test";

        String groupName = "New Group";

        String token = generateToken(host, restUsername, restPassword);

        Integer groupId = retrieveGroupIpIdForGroupName(host, token, groupName);

        Content c = Request.get(host + "/api/user-groups/" + groupId + "/members")
                .addHeader("Authorization", "YELLOWFIN ts=" + System.currentTimeMillis() + " , nonce=" + new Random().nextLong() + ", token=" + token)
                .addHeader("Accept", "application/vnd.yellowfin.api-v1+json")
                .addHeader("Content-Type", "application/json")
                .execute().returnContent();

        System.out.println(c.toString());

    }


    public static Integer retrieveGroupIpIdForGroupName(String host, String token, String groupName) throws IOException {

        Content c = Request.get(host + "/api/user-groups")
                .addHeader("Authorization", "YELLOWFIN ts=" + System.currentTimeMillis() + " , nonce=" + new Random().nextLong() + ", token=" + token)
                .addHeader("Accept", "application/vnd.yellowfin.api-v1+json")
                .addHeader("Content-Type", "application/json")
                .execute().returnContent();

        JsonObject jsonObject = new JsonParser().parse(c.asString()).getAsJsonObject();
        JsonElement groupList = jsonObject.get("items");
        JsonArray groups = groupList.getAsJsonArray();

        for (int i=0; i < groups.size(); i++ ) {
            JsonObject group = groups.getAsJsonArray().get(i).getAsJsonObject();
            if (groupName.equals(group.get("shortDescription").getAsString())) return group.get("userGroupId").getAsInt();
        }

        System.out.println("Group could not be found for name:" + groupName);
        System.exit(-1);

        return null;
    }

    /*
     *  This function generates an access token for a user that will grant them access to
     *  call REST API endpoints.
     */

    public static String generateToken(String host, String username, String password) throws IOException {

        Content c = Request.post(host + "/api/refresh-tokens")
                .addHeader("Authorization", "YELLOWFIN ts=" + System.currentTimeMillis() + " , nonce=" + new Random().nextLong())
                .addHeader("Accept", "application/vnd.yellowfin.api-v1+json")
                .addHeader("Content-Type", "application/json")
                .bodyString("{ \"userName\": \""+ username + "\",\"password\": \""+ password + "\"}", null)
                .execute().returnContent();

        JsonObject jsonObject = new JsonParser().parse(c.asString()).getAsJsonObject();
        JsonElement accessToken = jsonObject.getAsJsonObject("_embedded").getAsJsonObject("accessToken").get("securityToken");

        if (accessToken!=null) {
            System.out.println("Access Token: " + accessToken);
        } else {
            System.out.println("Token not retrieved successfully");
            System.exit(-1);
        }
        return accessToken.getAsString();

    }

}

...

Code Block
titleGo
collapsetrue
package main

import (
    "bytes"
    "encoding/json"
    "fmt"
    "io/ioutil"
    "math/rand"
    "net/http"
    "time"
)

func main() {
	fmt.Println("List Group Member Components")

	host := "http://localhost:8080/Yellowfin"
    restUsername := "admin@yellowfin.com.au"
    restPassword := "test"
    groupName := "New Group"

    token, err := generateToken(host, restUsername, restPassword)
	if err != nil {
		fmt.Println("Error generating token:", err)
		return
	}

	groupId, err := retrieveGroupIpIdForGroupName(host, token, groupName)
	if err != nil {
		fmt.Println("Error retrieving group ID:", err)
		return
	}

	err = listGroupMembers(host, token, groupId)
	if err != nil {
		fmt.Println("Error listing group members:", err)
	}
}

func retrieveGroupIpIdForGroupName(host, token, groupName string) (int, error) {
	client := &http.Client{}
	nonce := rand.Int63()
	req, err := http.NewRequest("GET", fmt.Sprintf("%s/api/user-groups", host), nil)
	if err != nil {
		return 0, fmt.Errorf("error creating request: %v", err)
	}

	req.Header.Set("Authorization", fmt.Sprintf("YELLOWFIN ts=%d, nonce=%d, token=%s", time.Now().UnixMilli(), nonce, token))
	req.Header.Set("Accept", "application/vnd.yellowfin.api-v1+json")
	req.Header.Set("Content-Type", "application/json")

	resp, err := client.Do(req)
	if err != nil {
		return 0, fmt.Errorf("error sending request: %v", err)
	}
	defer resp.Body.Close()

	body, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		return 0, fmt.Errorf("error reading response body: %v", err)
	}

	var jsonResponse map[string]interface{}
	err = json.Unmarshal(body, &jsonResponse)
	if err != nil {
		return 0, fmt.Errorf("error parsing JSON response: %v", err)
	}

	items, ok := jsonResponse["items"].([]interface{})
	if !ok {
		return 0, fmt.Errorf("error parsing group list from response")
	}

	for _, item := range items {
		group := item.(map[string]interface{})
		if group["shortDescription"] == groupName {
			groupId, ok := group["userGroupId"].(float64)
			if !ok {
				return 0, fmt.Errorf("error parsing group ID from response")
			}
			return int(groupId), nil
		}
	}

	fmt.Println("Group could not be found for name:", groupName)
	return 0, fmt.Errorf("group not found")
}

func listGroupMembers(host, token string, groupId int) error {
	client := &http.Client{}
	nonce := rand.Int63()
	req, err := http.NewRequest("GET", fmt.Sprintf("%s/api/user-groups/%d/members", host, groupId), nil)
	if err != nil {
		return fmt.Errorf("error creating request: %v", err)
	}

	req.Header.Set("Authorization", fmt.Sprintf("YELLOWFIN ts=%d, nonce=%d, token=%s", time.Now().UnixMilli(), nonce, token))
	req.Header.Set("Accept", "application/vnd.yellowfin.api-v1+json")
	req.Header.Set("Content-Type", "application/json")

	resp, err := client.Do(req)
	if err != nil {
		return fmt.Errorf("error sending request: %v", err)
	}
	defer resp.Body.Close()

	body, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		return fmt.Errorf("error reading response body: %v", err)
	}

	fmt.Println(string(body))
	return nil
}

func generateToken(host, restUsername, restPassword string) (string, error) {
	nonce := rand.Int63()
	requestBody, err := json.Marshal(map[string]string{
        "userName": restUsername,
        "password": restPassword,
	})
	if err != nil {
		return "", fmt.Errorf("error marshaling request body: %v", err)
	}

	client := &http.Client{}
	req, err := http.NewRequest("POST", fmt.Sprintf("%s/api/refresh-tokens", host), bytes.NewBuffer(requestBody))
	if err != nil {
		return "", fmt.Errorf("error creating request: %v", err)
	}

	req.Header.Set("Authorization", fmt.Sprintf("YELLOWFIN ts=%d, nonce=%d", time.Now().UnixMilli(), nonce))
	req.Header.Set("Accept", "application/vnd.yellowfin.api-v1+json")
	req.Header.Set("Content-Type", "application/json")

	resp, err := client.Do(req)
	if err != nil {
		return "", fmt.Errorf("error sending request: %v", err)
	}
	defer resp.Body.Close()

	body, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		return "", fmt.Errorf("error reading response body: %v", err)
	}

	var jsonResponse map[string]interface{}
	err = json.Unmarshal(body, &jsonResponse)
	if err != nil {
		return "", fmt.Errorf("error parsing JSON response: %v", err)
	}

	accessToken, ok := jsonResponse["_embedded"].(map[string]interface{})["accessToken"].(map[string]interface{})["securityToken"].(string)
	if !ok {
		return "", fmt.Errorf("token not retrieved successfully")
	}

	fmt.Println("Access Token:", accessToken)
	return accessToken, nil
}

...

Code Block
languagejava
titleJava
collapsetrue
package rest.code.examples;
import java.io.IOException;
import java.util.Random;
import org.apache.hc.client5.http.fluent.Content;
import org.apache.hc.client5.http.fluent.Request;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
/**
 * List the flattened group members from a User Group using the Yellowfin REST API
 */
public class ListGroupMembersFlattened {
    public static void main(String[] args) throws Exception {

        System.out.println("List Group Member Flattened");

        String host = "http://localhost:8080/Yellowfin";
        String restUsername = "admin@yellowfin.com.au";
        String restPassword = "test";

        String groupName = "New Group";

        String token = generateToken(host, restUsername, restPassword);

        Integer groupId = retrieveGroupIpIdForGroupName(host, token, groupName);

        Content c = Request.get(host + "/api/user-groups/" + groupId + "/flat-users")
                .addHeader("Authorization", "YELLOWFIN ts=" + System.currentTimeMillis() + " , nonce=" + new Random().nextLong() + ", token=" + token)
                .addHeader("Accept", "application/vnd.yellowfin.api-v1+json")
                .addHeader("Content-Type", "application/json")
                .execute().returnContent();

        System.out.println(c.toString());

    }


    public static Integer retrieveGroupIpIdForGroupName(String host, String token, String groupName) throws IOException {

        Content c = Request.get(host + "/api/user-groups")
                .addHeader("Authorization", "YELLOWFIN ts=" + System.currentTimeMillis() + " , nonce=" + new Random().nextLong() + ", token=" + token)
                .addHeader("Accept", "application/vnd.yellowfin.api-v1+json")
                .addHeader("Content-Type", "application/json")
                .execute().returnContent();

        JsonObject jsonObject = new JsonParser().parse(c.asString()).getAsJsonObject();
        JsonElement groupList = jsonObject.get("items");
        JsonArray groups = groupList.getAsJsonArray();

        for (int i=0; i < groups.size(); i++ ) {
            JsonObject group = groups.getAsJsonArray().get(i).getAsJsonObject();
            if (groupName.equals(group.get("shortDescription").getAsString())) return group.get("userGroupId").getAsInt();
        }

        System.out.println("Group could not be found for name:" + groupName);
        System.exit(-1);

        return null;
    }

    /*
     *  This function generates an access token for a user that will grant them access to
     *  call REST API endpoints.
     */

    public static String generateToken(String host, String username, String password) throws IOException {

        Content c = Request.post(host + "/api/refresh-tokens")
                .addHeader("Authorization", "YELLOWFIN ts=" + System.currentTimeMillis() + " , nonce=" + new Random().nextLong())
                .addHeader("Accept", "application/vnd.yellowfin.api-v1+json")
                .addHeader("Content-Type", "application/json")
                .bodyString("{ \"userName\": \""+ username + "\",\"password\": \""+ password + "\"}", null)
                .execute().returnContent();

        JsonObject jsonObject = new JsonParser().parse(c.asString()).getAsJsonObject();
        JsonElement accessToken = jsonObject.getAsJsonObject("_embedded").getAsJsonObject("accessToken").get("securityToken");

        if (accessToken!=null) {
            System.out.println("Access Token: " + accessToken);
        } else {
            System.out.println("Token not retrieved successfully");
            System.exit(-1);
        }
        return accessToken.getAsString();

    }

}

...

Code Block
titleGo
collapsetrue
package main

import (
    "bytes"
    "encoding/json"
    "fmt"
    "io/ioutil"
    "math/rand"
    "net/http"
    "os"
    "time"
)

func main() {
	fmt.Println("List Group Member Flattened")

	host := "http://localhost:8080/Yellowfin"
    restUsername := "admin@yellowfin.com.au"
    restPassword := "test"
    groupName := "New Group"

    token, err := generateToken(host, restUsername, restPassword)
	if err != nil {
		fmt.Println("Error generating token:", err)
		return
	}

	groupId, err := retrieveGroupIpIdForGroupName(host, token, groupName)
	if err != nil {
		fmt.Println("Error retrieving group ID:", err)
		return
	}

	client := &http.Client{}
	req, err := http.NewRequest("GET", fmt.Sprintf("%s/api/user-groups/%d/flat-users", host, groupId), nil)
	if err != nil {
		fmt.Println("Error creating request:", err)
		return
	}

	nonce := rand.Int63()
	req.Header.Set("Authorization", fmt.Sprintf("YELLOWFIN ts=%d, nonce=%d, token=%s", time.Now().UnixMilli(), nonce, token))
	req.Header.Set("Accept", "application/vnd.yellowfin.api-v1+json")
	req.Header.Set("Content-Type", "application/json")

	resp, err := client.Do(req)
	if err != nil {
		fmt.Println("Error sending request:", err)
		return
	}
	defer resp.Body.Close()

	body, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		fmt.Println("Error reading response body:", err)
		return
	}

	fmt.Println(string(body))
}

func retrieveGroupIpIdForGroupName(host, token, groupName string) (int, error) {
	client := &http.Client{}
	req, err := http.NewRequest("GET", fmt.Sprintf("%s/api/user-groups", host), nil)
	if err != nil {
		return 0, fmt.Errorf("error creating request: %v", err)
	}

	nonce := rand.Int63()
	req.Header.Set("Authorization", fmt.Sprintf("YELLOWFIN ts=%d, nonce=%d, token=%s", time.Now().UnixMilli(), nonce, token))
	req.Header.Set("Accept", "application/vnd.yellowfin.api-v1+json")
	req.Header.Set("Content-Type", "application/json")

	resp, err := client.Do(req)
	if err != nil {
		return 0, fmt.Errorf("error sending request: %v", err)
	}
	defer resp.Body.Close()

	body, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		return 0, fmt.Errorf("error reading response body: %v", err)
	}

	var jsonObject map[string]interface{}
	if err := json.Unmarshal(body, &jsonObject); err != nil {
		return 0, fmt.Errorf("error parsing JSON response: %v", err)
	}

	items, ok := jsonObject["items"].([]interface{})
	if !ok {
		return 0, fmt.Errorf("items not found in response")
	}

	for _, item := range items {
		group := item.(map[string]interface{})
		if group["shortDescription"] == groupName {
			return int(group["userGroupId"].(float64)), nil
		}
	}

	fmt.Println("Group could not be found for name:", groupName)
	os.Exit(-1)
	return 0, fmt.Errorf("group not found")
}

func generateToken(host, username, password string) (string, error) {
	nonce := rand.Int63()
	requestBody, err := json.Marshal(map[string]string{
        "userName": username,
        "password": password,
	})
	if err != nil {
		return "", fmt.Errorf("error marshaling request body: %v", err)
	}

	client := &http.Client{}
	request, err := http.NewRequest("POST", fmt.Sprintf("%s/api/refresh-tokens", host), bytes.NewBuffer(requestBody))
	if err != nil {
		return "", fmt.Errorf("error creating request: %v", err)
	}

	request.Header.Set("Authorization", fmt.Sprintf("YELLOWFIN ts=%d, nonce=%d", time.Now().UnixMilli(), nonce))
	request.Header.Set("Accept", "application/vnd.yellowfin.api-v1+json")
	request.Header.Set("Content-Type", "application/json")

	response, err := client.Do(request)
	if err != nil {
		return "", fmt.Errorf("error sending request: %v", err)
	}
	defer response.Body.Close()

	responseBody, err := ioutil.ReadAll(response.Body)
	if err != nil {
		return "", fmt.Errorf("error reading response body: %v", err)
	}

	var jsonResponse map[string]interface{}
	if err := json.Unmarshal(responseBody, &jsonResponse); err != nil {
		return "", fmt.Errorf("error parsing JSON response: %v", err)
	}

	accessToken, ok := jsonResponse["_embedded"].(map[string]interface{})["accessToken"].(map[string]interface{})["securityToken"].(string)
	if !ok {
		return "", fmt.Errorf("token not retrieved successfully")
	}

	fmt.Println("Access Token:", accessToken)
	return accessToken, nil
}

...