Page History
...
Members can be removed from a user group using DELETE /api/user-groups/{groupId}/members end-point (https://developers.yellowfinbi.com/dev/api-docs/current/#operation/bulkDeleteUserGroupMembers )Bulk-Delete User Group Members.
Members are removed by supplying a query parameter that contains a list of memberIds to be removed. This is of the form:
Code Block |
---|
memberIds=['ROLE|YFADMIN','PERSON|13235'] |
The following examples illustrate removing a user (identified by username), from a group (identified by its name). Java | C# | Go | JavaScript | PHP | Python
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
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 | ||||||
---|---|---|---|---|---|---|
| ||||||
using System.Net.Http.Headers;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
namespace YellowfinAPIExamples
{
public class RemoveMemberFromGroup
{
public static async Task Main(string[] args)
{
Console.WriteLine(""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 = await GenerateToken(host, restUsername, restPassword);
int userIpId = await RetrieveUserIpIdForUsername(host, token, usernameOfUserToRemove);
int groupId = await RetrieveGroupIpIdForGroupName(host, token, userGroupToAddRemoveUserFrom);
string groupMembersPayload = $""memberIds=%5B'PERSON%7C{userIpId}'%5D"";
Console.WriteLine(""UserIpId: "" + userIpId);
Console.WriteLine(""GroupId: "" + groupId);
Console.WriteLine(""Payload: "" + groupMembersPayload);
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""));
HttpResponseMessage response = await httpClient.DeleteAsync($""{host}/api/user-groups/{groupId}/members/?{groupMembersPayload}"");
if (response.IsSuccessStatusCode)
{
string responseBody = await response.Content.ReadAsStringAsync();
Console.WriteLine($""User {usernameOfUserToRemove} removed from group {userGroupToAddRemoveUserFrom} successfully"");
Console.WriteLine(""Response: "" + responseBody);
}
else
{
Console.WriteLine(""Failed to remove user from group. Status code: "" + response.StatusCode);
}
}
}
public static async Task<int> RetrieveGroupIpIdForGroupName(string host, string token, string groupName)
{
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""));
HttpResponseMessage response = await httpClient.GetAsync($""{host}/api/user-groups"");
if (response.IsSuccessStatusCode)
{
string responseBody = await response.Content.ReadAsStringAsync();
JObject jsonObject = JsonConvert.DeserializeObject<JObject>(responseBody);
JArray groups = (JArray)jsonObject[""items""];
foreach (var group in groups)
{
if (group[""shortDescription""].ToString() == groupName)
{
return group[""userGroupId""].Value<int>();
}
}
Console.WriteLine(""Group could not be found for name:"" + groupName);
Environment.Exit(-1);
}
else
{
Console.WriteLine(""Failed to retrieve group list. Status code: "" + response.StatusCode);
Environment.Exit(-1);
}
return -1;
}
}
public static async Task<int> RetrieveUserIpIdForUsername(string host, string token, string userName)
{
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""));
HttpResponseMessage response = await httpClient.GetAsync($""{host}/api/rpc/users/user-details-by-username/{userName}"");
if (response.IsSuccessStatusCode)
{
string responseBody = await response.Content.ReadAsStringAsync();
JObject jsonObject = JsonConvert.DeserializeObject<JObject>(responseBody);
int userIpId = jsonObject[""userId""].Value<int>();
return userIpId;
}
else
{
Console.WriteLine(""Failed to retrieve user IP ID. Status code: "" + response.StatusCode);
Environment.Exit(-1);
}
return -1;
}
}
public static async Task<string> GenerateToken(string host, string username, string password)
{
using (var client = new HttpClient())
{
var request = new HttpRequestMessage(HttpMethod.Post, $""{host}/api/refresh-tokens"");
request.Headers.Add(""Authorization"", $""YELLOWFIN ts={DateTimeOffset.UtcNow.ToUnixTimeMilliseconds()}, nonce={new Random().NextInt64()}"");
request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue(""application/vnd.yellowfin.api-v1+json""));
request.Content = new StringContent(
JsonConvert.SerializeObject(new { userName = username, password = password }),
System.Text.Encoding.UTF8,
""application/json""
);
HttpResponseMessage response = await client.SendAsync(request);
string responseContent = await response.Content.ReadAsStringAsync();
JObject jsonObject = JsonConvert.DeserializeObject<JObject>(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 | ||||
---|---|---|---|---|
| ||||
package main
import (
""bytes""
""encoding/json""
""fmt""
""io/ioutil""
""math/rand""
""net/http""
""time""
)
func main() {
fmt.Println(""Remove User from Group"")
host := ""http://localhost:8080/Yellowfin""
restUsername := ""admin@yellowfin.com.au""
restPassword := ""test""
userGroupToAddRemoveUserFrom := ""New Group""
usernameOfUserToRemove := ""user1@yellowfin.com.au""
token, err := generateToken(host, restUsername, restPassword)
if err != nil {
fmt.Println(""Error generating token:"", err)
return
}
userIpId, err := retrieveUserIpIdForUsername(host, token, usernameOfUserToRemove)
if err != nil {
fmt.Println(""Error retrieving user IP ID:"", err)
return
}
groupId, err := retrieveGroupIpIdForGroupName(host, token, userGroupToAddRemoveUserFrom)
if err != nil {
fmt.Println(""Error retrieving group ID:"", err)
return
}
groupMembersPayload := fmt.Sprintf(""memberIds=%%5B'PERSON%%7C%d'%%5D"", userIpId)
fmt.Println(""UserIpId:"", userIpId)
fmt.Println(""GroupId:"", groupId)
fmt.Println(""Payload:"", groupMembersPayload)
client := &http.Client{}
req, err := http.NewRequest(""DELETE"", host+""/api/user-groups/""+fmt.Sprint(groupId)+""/members/?""+groupMembersPayload, 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.Printf(""User %s removed from group %s successfully\n"", usernameOfUserToRemove, userGroupToAddRemoveUserFrom)
fmt.Println(""Response:"", string(body))
}
func retrieveGroupIpIdForGroupName(host, token, groupName string) (int, error) {
client := &http.Client{}
req, err := http.NewRequest(""GET"", host+""/api/user-groups"", nil)
if err != nil {
return 0, 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, err
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
return 0, err
}
var jsonObject map[string]interface{}
err = json.Unmarshal(body, &jsonObject)
if err != nil {
return 0, err
}
groups := jsonObject[""items""].([]interface{})
for _, group := range groups {
groupMap := group.(map[string]interface{})
if groupMap[""shortDescription""] == groupName {
return int(groupMap[""userGroupId""].(float64)), nil
}
}
fmt.Println(""Group could not be found for name:"", groupName)
return 0, fmt.Errorf(""group not found"")
}
func retrieveUserIpIdForUsername(host, token, userName string) (int, error) {
client := &http.Client{}
req, err := http.NewRequest(""GET"", host+""/api/rpc/users/user-details-by-username/""+userName, nil)
if err != nil {
return 0, 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, err
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
return 0, err
}
var jsonObject map[string]interface{}
err = json.Unmarshal(body, &jsonObject)
if err != nil {
return 0, err
}
return int(jsonObject[""userId""].(float64)), 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 """", err
}
client := &http.Client{}
request, err := http.NewRequest(""POST"", host+""/api/refresh-tokens"", bytes.NewBuffer(requestBody))
if err != nil {
return """", 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 """", err
}
defer response.Body.Close()
responseBody, err := ioutil.ReadAll(response.Body)
if err != nil {
return """", err
}
var jsonResponse map[string]interface{}
err = json.Unmarshal(responseBody, &jsonResponse)
if err != nil {
return """", err
}
accessToken, ok := jsonResponse[""_embedded""].(map[string]interface{})[""accessToken""].(map[string]interface{})[""securityToken""].(string)
if !ok {
return """", fmt.Errorf(""Token not retrieved successfully"")
}
return accessToken, nil
} |
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
const fetch = require(""node-fetch"");
async function main() {
console.log(""Remove User from Group"");
const host = ""http://localhost:8080/Yellowfin"";
const restUsername = ""admin@yellowfin.com.au"";
const restPassword = ""test"";
const userGroupToAddRemoveUserFrom = ""New Group"";
const usernameOfUserToRemove = ""user1@yellowfin.com.au"";
const token = await generateToken(host, restUsername, restPassword);
if (!token) {
console.error(""Failed to retrieve access token"");
return;
}
const userIpId = await retrieveUserIpIdForUsername(host, token, usernameOfUserToRemove);
if (userIpId === null) {
console.error(""Failed to retrieve user IP ID"");
return;
}
const groupId = await retrieveGroupIpIdForGroupName(host, token, userGroupToAddRemoveUserFrom);
if (groupId === null) {
console.error(""Failed to retrieve group ID"");
return;
}
const groupMembersPayload = `memberIds=%5B'PERSON%7C${userIpId}'%5D`;
console.log(""UserIpId:"", userIpId);
console.log(""GroupId:"", groupId);
console.log(""Payload:"", groupMembersPayload);
const nonce = Math.floor(Math.random() * Number.MAX_SAFE_INTEGER);
const headers = {
'Authorization': `YELLOWFIN ts=${Date.now()}, nonce=${nonce}, token=${token}`,
'Accept': 'application/vnd.yellowfin.api-v1+json',
'Content-Type': 'application/json'
};
try {
const response = await fetch(`${host}/api/user-groups/${groupId}/members/?${groupMembersPayload}`, {
method: 'DELETE',
headers: headers
});
if (!response.ok) {
throw new Error(`HTTP error! Status: ${response.status}`);
}
const responseBody = await response.text();
console.log(`User ${usernameOfUserToRemove} removed from group ${userGroupToAddRemoveUserFrom} successfully`);
console.log(""Response:"", responseBody);
} catch (error) {
console.error(""Error:"", error.message);
}
}
async function retrieveGroupIpIdForGroupName(host, token, groupName) {
const nonce = Math.floor(Math.random() * Number.MAX_SAFE_INTEGER);
const headers = {
'Authorization': `YELLOWFIN ts=${Date.now()}, nonce=${nonce}, token=${token}`,
'Accept': 'application/vnd.yellowfin.api-v1+json',
'Content-Type': 'application/json'
};
try {
const response = await fetch(`${host}/api/user-groups`, {
method: 'GET',
headers: headers
});
if (!response.ok) {
throw new Error(`HTTP error! Status: ${response.status}`);
}
const jsonObject = await response.json();
const groups = jsonObject.items;
for (let group of groups) {
if (group.shortDescription === groupName) {
return group.userGroupId;
}
}
console.error(""Group could not be found for name:"", groupName);
return null;
} catch (error) {
console.error(""Error:"", error.message);
return null;
}
}
async function retrieveUserIpIdForUsername(host, token, userName) {
const nonce = Math.floor(Math.random() * Number.MAX_SAFE_INTEGER);
const headers = {
'Authorization': `YELLOWFIN ts=${Date.now()}, nonce=${nonce}, token=${token}`,
'Accept': 'application/vnd.yellowfin.api-v1+json',
'Content-Type': 'application/json'
};
try {
const response = await fetch(`${host}/api/rpc/users/user-details-by-username/${userName}`, {
method: 'GET',
headers: headers
});
if (!response.ok) {
throw new Error(`HTTP error! Status: ${response.status}`);
}
const jsonObject = await response.json();
return jsonObject.userId;
} catch (error) {
console.error(""Error:"", error.message);
return null;
}
}
async function generateToken(host, restUsername, restPassword) {
const nonce = Math.floor(Math.random() * Number.MAX_SAFE_INTEGER);
const headers = {
'Authorization': `YELLOWFIN ts=${Date.now()}, nonce=${nonce}`,
'Accept': 'application/vnd.yellowfin.api-v1+json',
'Content-Type': 'application/json'
};
const body = JSON.stringify({
userName: restUsername,
password: restPassword
});
try {
const response = await fetch(`${host}/api/refresh-tokens`, {
method: 'POST',
headers: headers,
body: body
});
if (!response.ok) {
throw new Error(`HTTP error! Status: ${response.status}`);
}
const jsonResponse = await response.json();
const accessToken = jsonResponse._embedded.accessToken.securityToken;
if (accessToken) {
console.log(`Access Token: ${accessToken}`);
return accessToken;
} else {
console.log(""Token not retrieved"");
return null;
}
} catch (error) {
console.error(""Error:"", error.message);
return null;
}
}
main(); |
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
<?php
function main() {
echo ""Remove User from Group\n"";
$host = ""http://localhost:8080/Yellowfin"";
$restUsername = ""admin@yellowfin.com.au"";
$restPassword = ""test"";
$userGroupToAddRemoveUserFrom = ""New Group"";
$usernameOfUserToRemove = ""user1@yellowfin.com.au"";
try {
$token = generateToken($host, $restUsername, $restPassword);
} catch (Exception $e) {
echo ""Error generating token: "" . $e->getMessage();
return;
}
try {
$userIpId = retrieveUserIpIdForUsername($host, $token, $usernameOfUserToRemove);
$groupId = retrieveGroupIpIdForGroupName($host, $token, $userGroupToAddRemoveUserFrom);
} catch (Exception $e) {
echo ""Error retrieving IDs: "" . $e->getMessage();
return;
}
// The pipe ""|"" symbol is URL escaped in the following line.
$groupMembersPayload = ""memberIds=%5B'PERSON%7C"" . $userIpId . ""'%5D"";
echo ""UserIpId: "" . $userIpId . ""\n"";
echo ""GroupId: "" . $groupId . ""\n"";
echo ""Payload: "" . $groupMembersPayload . ""\n"";
$nonce = mt_rand();
$headers = array(
'Authorization: YELLOWFIN ts=' . intval(microtime(true) * 1000) . ', nonce=' . $nonce . ', token=' . $token,
'Accept: application/vnd.yellowfin.api-v1+json',
'Content-Type: application/json'
);
try {
$response = httpRequest('DELETE', ""$host/api/user-groups/$groupId/members/?$groupMembersPayload"", $headers);
echo ""User $usernameOfUserToRemove removed from group $userGroupToAddRemoveUserFrom successfully\n"";
echo ""Response: "" . $response;
} catch (Exception $e) {
echo ""Error sending request: "" . $e->getMessage();
}
}
function retrieveGroupIpIdForGroupName($host, $token, $groupName) {
$nonce = mt_rand();
$headers = array(
'Authorization: YELLOWFIN ts=' . intval(microtime(true) * 1000) . ', nonce=' . $nonce . ', token=' . $token,
'Accept: application/vnd.yellowfin.api-v1+json',
'Content-Type: application/json'
);
$response = httpRequest('GET', ""$host/api/user-groups"", $headers);
$jsonObject = json_decode($response, true);
$groups = $jsonObject['items'];
foreach ($groups as $group) {
if ($group['shortDescription'] === $groupName) {
return $group['userGroupId'];
}
}
echo ""Group could not be found for name: "" . $groupName . ""\n"";
exit(-1);
}
function retrieveUserIpIdForUsername($host, $token, $userName) {
$nonce = mt_rand();
$headers = array(
'Authorization: YELLOWFIN ts=' . intval(microtime(true) * 1000) . ', nonce=' . $nonce . ', token=' . $token,
'Accept: application/vnd.yellowfin.api-v1+json',
'Content-Type: application/json'
);
$response = httpRequest('GET', ""$host/api/rpc/users/user-details-by-username/$userName"", $headers);
$jsonObject = json_decode($response, true);
return $jsonObject['userId'];
}
function generateToken($host, $restUsername, $restPassword) {
$nonce = mt_rand();
$headers = array(
'Authorization: YELLOWFIN ts=' . intval(microtime(true) * 1000) . ', nonce=' . $nonce,
'Accept: application/vnd.yellowfin.api-v1+json',
'Content-Type: application/json'
);
$requestBody = json_encode(array(
""userName"" => $restUsername,
""password"" => $restPassword
));
$response = httpRequest('POST', ""$host/api/refresh-tokens"", $headers, $requestBody);
$jsonResponse = json_decode($response, true);
if (isset($jsonResponse[""_embedded""][""accessToken""][""securityToken""])) {
$accessToken = $jsonResponse[""_embedded""][""accessToken""][""securityToken""];
echo ""Access Token: "" . $accessToken . ""\n"";
return $accessToken;
} else {
throw new Exception(""Token not retrieved successfully"");
}
}
function httpRequest($method, $url, $headers, $data = null) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $method);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
if ($data !== null) {
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
}
$response = curl_exec($ch);
if (curl_errno($ch)) {
throw new Exception('Error: ' . curl_error($ch));
}
curl_close($ch);
return $response;
}
main();
?> |
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
import json
import random
import time
import requests
def main():
print(""Remove User from Group"")
host = ""http://localhost:8080/Yellowfin""
rest_username = ""admin@yellowfin.com.au""
rest_password = ""test""
user_group_to_add_remove_user_from = ""New Group""
username_of_user_to_remove = ""user1@yellowfin.com.au""
try:
token = generate_token(host, rest_username, rest_password)
except Exception as e:
print(f""Error generating token: {e}"")
return
try:
user_ip_id = retrieve_user_ip_id_for_username(host, token, username_of_user_to_remove)
group_id = retrieve_group_ip_id_for_group_name(host, token, user_group_to_add_remove_user_from)
except Exception as e:
print(f""Error retrieving IDs: {e}"")
return
# The pipe ""|"" symbol is URL escaped in the following line.
group_members_payload = f""memberIds=%5B'PERSON%7C{user_ip_id}'%5D""
print(""UserIpId:"", user_ip_id)
print(""GroupId:"", group_id)
print(""Payload:"", group_members_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'
}
try:
response = requests.delete(f""{host}/api/user-groups/{group_id}/members/?{group_members_payload}"", headers=headers)
response.raise_for_status()
print(f""User {username_of_user_to_remove} removed from group {user_group_to_add_remove_user_from} successfully"")
print(""Response:"", response.text)
except requests.RequestException as e:
print(f""Error sending request: {e}"")
def retrieve_group_ip_id_for_group_name(host, token, group_name):
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.get(f""{host}/api/user-groups"", headers=headers)
response.raise_for_status()
json_object = response.json()
groups = json_object['items']
for group in groups:
if group['shortDescription'] == group_name:
return group['userGroupId']
print(f""Group could not be found for name: {group_name}"")
exit(-1)
def retrieve_user_ip_id_for_username(host, token, user_name):
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.get(f""{host}/api/rpc/users/user-details-by-username/{user_name}"", headers=headers)
response.raise_for_status()
json_object = response.json()
return json_object['userId']
def generate_token(host, rest_username, rest_password):
nonce = random.randint(0, 2**63 - 1)
headers = {
'Authorization': f'YELLOWFIN ts={int(time.time() * 1000)}, nonce={nonce}',
'Accept': 'application/vnd.yellowfin.api-v1+json',
'Content-Type': 'application/json'
}
request_body = json.dumps({
""userName"": rest_username,
""password"": rest_password
})
response = requests.post(f""{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() |
List Group Member Components
...