30日間の無料評価版をお試しいただけます。

ユーザー同期は、Yellowfinをサードパーティ製アプリケーションや統合環境に統合する上で重要なポイントです。ユーザー同期とは、外部のシステムに合わせてYellowfinでユーザーを作成または更新するプロセスです。ユーザーの履歴と設定を保存し、コンテンツを利用するときに適切なセキュリティを適用するには、Yellowfin内でユーザーを作成する必要があります。Yellowfinには、ユーザーを管理し、外部システムとユーザーの更新を同期するためのREST サービスが含まれています。

ユーザー管理に関連するRESTサービスはこちらから利用できます。

ユーザー同期には、主に2つの方法があり、その違いはユーザー同期が行われるタイミングに関係しています。

  1. 既存のユーザー同期プロセスとのリンク
    この方法では、外部システムでユーザーを作成すると同時にユーザーを作成します。つまり、ユーザーが初めてYellowfinにログインしようとする前にユーザーが作成されます。外部システムのユーザーに対する更新も、サービスを通して即座にYellowfinに伝わります。
  2. オンデマンド (または遅延) 同期
    オンデマンド方法では、Yellowfinに初めてログインしようとしているユーザーのみが作成されます。これは、SSOログインプロセスを組み合わせて行うことができます。一般的なパターンは、ユーザーが最初にログインしようとしたときに、SSOコードに以下の処理を実行させることです。
    • Yellowfinにログインしようとしているユーザーが存在するかどうかを確認します。
    • Yellowfinにユーザーが存在しない場合はユーザーを作成します。
    • Yellowfinにユーザーが存在する場合は、詳細が変更された場合にユーザーを更新します。
    • ユーザーが正しいセキュリティアクセス権を持っているかを確認します。
    • ユーザーアクセスが外部システムと異なる場合、ユーザーのグループメンバーシップが正しくなるように調整します。
    • SSOを実行し、ユーザーをYellowfinに誘導します。

オンデマンド同期の問題の1つは、グループメンバーシップがユーザーのログイン時にのみ更新されることです。ユーザーがグループメンバーシップ経由でブロードキャストを受信している場合、外部システムでグループから削除された後も、Yellowfinにログインするまでブロードキャストを受信し続ける可能性があります。ただし、システム管理者は、Yellowfin内でグループからユーザーを手動で削除できます。

REST サービスを使用してユーザーを作成および管理する場合、ユーザーJSONモデルを提供する必要があります。こちらは、ユーザーJSONモデルのフォーマットです。

{
"userId": "user1",
"emailAddress": "user1@yellowfin.com.au",
"roleCode": "Consumer & Collaborator",
"password": "secr3t",
"firstName": "User",
"lastName": "One",
"languageCode": "EN",
"timeZoneCode": "AUSTRALIA/SYDNEY",
 }

ユーザーを編集または作成する場合、必要な属性をモデルに入力します。ユーザーには、姓、名、ユーザー名、電子メールアドレスのほか、言語とタイムゾーンの設定を指定できます。

ユーザーには、アプリケーション内の様々な機能へのアクセスを決定するロールも割り当てられます。利用可能なロールは、別のAPI 呼び出しを介してリクエストできます。

ユーザーの取得

アプリケーションから既存のユーザーの詳細を取得します。これは、ユーザーが既に存在するかどうかを確認するためにも使用できます。GET /api/rpc/users/user-details-by-username/{user-name} Get a User by Username を照会して、ユーザーの詳細を取得します。

以下の例は、様々なプログラミング言語で、(ユーザー名を使用して) 既存のユーザーを取得する方法を示しています。

Java
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;
/**
* Retrieve a user using the Yellowfin REST API
*/
public class RetrieveAUser {
   public static void main(String[] args) throws Exception {
      
            String host = "http://localhost:8080/yellowfinHead";
            String restUsername = "admin@yellowfin.com.au";
            String restPassword = "test";
             
            String userToRetrieve = "admin@yellowfin.com.au";
             
            String token = generateToken(host, restUsername, restPassword);
             
            System.out.println("Retrieving User: " + userToRetrieve);
             
            Content c = Request.get(host + "/api/rpc/users/user-details-by-username/" + userToRetrieve)
                    .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.print(c.asString());
      
   }
   
   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();
     
   }
   
}
C#
namespace YellowfinAPIExamples;
using System.Net.Http.Headers;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
 
public class RetrieveAUser
{
    static async Task Main(string[] args)
    {
        string host = "http://localhost:8080/yellowfinHead";
        string restUsername = "admin@yellowfin.com.au";
        string restPassword = "test";
        string userToRetrieve = "admin@yellowfin.com.au";
 
        string token = await GenerateToken(host, restUsername, restPassword);
 
        Console.WriteLine("Retrieving User: " + userToRetrieve);
 
        using (var httpClient = new HttpClient())
        {
            httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("YELLOWFIN", "ts=" + DateTimeOffset.Now.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/" + userToRetrieve);
            if (response.IsSuccessStatusCode)
            {
                string responseBody = await response.Content.ReadAsStringAsync();
                Console.WriteLine(responseBody);
            }
            else
            {
                Console.WriteLine("Failed to retrieve user details. 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(
                JsonConvert.SerializeObject(new { userName = restUsername, password = restPassword }),
                MediaTypeHeaderValue.Parse("application/json")
            );
 
            // Send request and get response
            HttpResponseMessage response = await client.SendAsync(request);
            string responseContent = await response.Content.ReadAsStringAsync();
 
            // Parse JSON response
            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");
                Environment.Exit(-1);
            }
 
            return accessToken;
        }
    }
}
Go
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"
    userToRetrieve := "admin@yellowfin.com.au"
 
    token, err := generateToken(host, restUsername, restPassword)
    if err != nil {
        fmt.Println("Error generating token:", err)
        return
    }
 
    fmt.Println("Retrieving User:", userToRetrieve)
 
    client := &http.Client{}
    req, err := http.NewRequest("GET", host+"/api/rpc/users/user-details-by-username/"+userToRetrieve, 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 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
}
JavaScript
const fetch = require('node-fetch');
 
async function main() {
    const host = "http://localhost:8080/Yellowfin";
    const restUsername = "admin@yellowfin.com.au";
    const restPassword = "test";
    const userToRetrieve = "admin@yellowfin.com.au";
 
    try {
        const token = await generateToken(host, restUsername, restPassword);
        console.log("Retrieving User:", userToRetrieve);
 
        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'
        };
 
        const response = await fetch(`${host}/api/rpc/users/user-details-by-username/${userToRetrieve}`, {
            method: 'GET',
            headers: headers
        });
 
        const userResponse = await response.json();
 
        console.log(JSON.stringify(userResponse));
    } catch (error) {
        console.error("Error:", error.response ? error.response.data : error.message);
    }
}
 
async function generateToken(host, restUsername, restPassword) {
    // Generate nonce
    const nonce = Math.floor(Math.random() * Number.MAX_SAFE_INTEGER);
 
    // Create request headers
    const headers = {
        'Authorization': `YELLOWFIN ts=${Date.now()}, nonce=${nonce}`,
        'Accept': 'application/vnd.yellowfin.api-v1+json',
        'Content-Type': 'application/json'
    };
 
    // Create request body
    const body = JSON.stringify({
        userName: restUsername,
        password: restPassword
    });
 
    try {
        // Make POST request
        const response = await fetch(`${host}/api/refresh-tokens`, {
            method: 'POST',
            headers: headers,
            body: body
        });
 
        // Check if request was successful
        if (!response.ok) {
            throw new Error(`HTTP error! Status: ${response.status}`);
        }
 
        // Parse JSON response
        const jsonResponse = await response.json();
        const accessToken = jsonResponse._embedded.accessToken.securityToken;
 
        if (accessToken) {
            console.log(`Access Token: ${accessToken}`);
        } else {
            console.log("Token not retrieved");
        }
 
        return accessToken;
    } catch (error) {
        console.error("Error:", error.message);
    }
 
    return null;
}
 
main();
PHP
<?php
function main() {
    $host = "http://localhost:8080/Yellowfin";
    $restUsername = "admin@yellowfin.com.au";
    $restPassword = "test";
    $userToRetrieve = "admin@yellowfin.com.au";
 
    try {
        $token = generateToken($host, $restUsername, $restPassword);
        echo "Retrieving User: $userToRetrieve\n";
 
        $nonce = mt_rand();
 
        $headers = [
            'Authorization: YELLOWFIN ts=' . intval(microtime(true) * 1000) . ', nonce=' . $nonce . ', token=' . $token,
            'Accept: application/vnd.yellowfin.api-v1+json',
            'Content-Type: application/json'
        ];
 
        $url = "$host/api/rpc/users/user-details-by-username/$userToRetrieve";
        $response = httpRequest('GET', $url, $headers);
 
        echo $response . "\n";
    } catch (Exception $e) {
        echo "Error: " . $e->getMessage() . "\n";
    }
}
 
function generateToken($host, $restUsername, $restPassword) {
    // Generate nonce
    $nonce = mt_rand();
 
    // Create request body
    $requestBody = json_encode(array(
        "userName" => $restUsername,
        "password" => $restPassword
    ));
 
    // Create request headers
    $headers = array(
        'Authorization: YELLOWFIN ts=' . intval(microtime(true) * 1000) . ', nonce=' . $nonce,
        'Accept: application/vnd.yellowfin.api-v1+json',
        'Content-Type: application/json'
    );
 
    $response = httpRequest('POST', "$host/api/refresh-tokens", $headers, $requestBody);
 
    // Parse JSON response
    $jsonResponse = json_decode($response, true);
 
    // Get access token from response
    if (isset($jsonResponse["_embedded"]["accessToken"]["securityToken"])) {
        $accessToken = $jsonResponse["_embedded"]["accessToken"]["securityToken"];
        echo "Access Token: " . $accessToken;
 
        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()
?>
Python
import json
import random
import time
 
import requests
 
def main():
    host = "http://localhost:8080/yellowfinHead"
    rest_username = "admin@yellowfin.com.au"
    rest_password = "test"
    user_to_retrieve = "admin@yellowfin.com.au"
 
    try:
        token = generate_token(host, rest_username, rest_password)
        print("Retrieving User:", user_to_retrieve)
 
        nonce = str(random.randint(1, 1000000000))
 
        headers = {
            'Authorization': f'YELLOWFIN ts={int(time.time() * 1000)}, nonce={nonce}, token={token}',
            'Accept': 'application/vnd.yellowfin.api-v1+json',
            'Content-Type': 'application/json'
        }
 
        url = f"{host}/api/rpc/users/user-details-by-username/{user_to_retrieve}"
        response = requests.get(url, headers=headers)
 
        if response.status_code == 200:
            print(response.text)
        else:
            print("Failed to retrieve user details. Status code:", response.status_code)
    except Exception as e:
        print("Error:", e)
 
def generate_token(host, rest_username, rest_password):
    nonce = random.randint(0, 2 ** 63 - 1)
 
    # Create request body
    request_body = json.dumps({
        "userName": rest_username,
        "password": rest_password
    })
 
    # Create request headers
    headers = {
        'Authorization': f'YELLOWFIN ts={int(time.time() * 1000)}, nonce={nonce}',
        'Accept': 'application/vnd.yellowfin.api-v1+json',
        'Content-Type': 'application/json'
    }
 
    # Send HTTP request
    response = requests.post(host + "/api/refresh-tokens", headers=headers, data=request_body)
 
    # Check response status
    if response.status_code == 200:
        # Parse JSON response
        json_response = response.json()
        access_token = json_response["_embedded"]["accessToken"]["securityToken"]
        print("Access Token:", access_token)
 
        return access_token
    else:
        raise Exception("Token not retrieved successfully")
 
if __name__ == "__main__":
    main()

ユーザーの作成

POST /api/admin/users Create User Admin にユーザーモデルの配列を指定して、新しいユーザーを作成します。複数のユーザーモデルを渡して、複数のユーザーを同時に作成します。

以下の例では、様々なプログラミング言語で新しいユーザーを作成します。

こちらのJava コードの例では、REST 呼び出しとJSON シリアル化の処理に、Apache HTTP クライアントとGSONを使用しています。

Java
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 CreateAUser {
    public static void main(String[] args) throws Exception {
 
        String host = "http://localhost:8080/Yellowfin";
        String restUsername = "admin@yellowfin.com.au";
        String restPassword = "test";
 
        String createUserPayload = "[ {" +
                "  \"userId\": \"user1\"," +
                "  \"emailAddress\": \"user1@yellowfin.com.au\"," +
                "  \"roleCode\": \"Consumer & Collaborator\"," +
                "  \"password\": \"test\"," +
                "  \"firstName\": \"User\"," +
                "  \"lastName\": \"One\"," +
                "  \"languageCode\": \"EN\"," +
                "  \"timeZoneCode\": \"AUSTRALIA/SYDNEY\" +
                " } ]";
 
 
 
 
        String token = generateToken(host, restUsername, restPassword);
 
        System.out.println("Payload: " + createUserPayload);
 
        Content c = Request.post(host + "/api/admin/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")
                .bodyString(createUserPayload, null)
                .execute().returnContent();
 
        System.out.print(c.asString());
 
    }
 
    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();
 
    }
 
}
C#
namespace YellowfinAPIExamples;
 
using System.Net.Http.Headers;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
 
public class CreateAUser
{
    static async Task Main(string[] args)
    {
        string host = "http://localhost:8080/Yellowfin";
        string restUsername = "admin@yellowfin.com.au";
        string restPassword = "test";
             
        string createUserPayload = "[ {" +
                                   "  \"userId\": \"user1\"," +
                                   "  \"emailAddress\": \"user1@yellowfin.com.au\"," +
                                   "  \"roleCode\": \"Consumer & Collaborator\"," +
                                   "  \"password\": \"test\"," +
                                   "  \"firstName\": \"User\"," +
                                   "  \"lastName\": \"One\"," +
                                   "  \"languageCode\": \"EN\"," +
                                   "  \"timeZoneCode\": \"AUSTRALIA/SYDNEY\" +
                                   " } ]";
 
        string token = await GenerateToken(host, restUsername, restPassword);
 
        Console.WriteLine("Payload: " + createUserPayload);
 
        using (HttpClient client = new HttpClient())
        {
            long nonce = new Random().NextInt64();
            HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, host + "/api/admin/users");
            request.Headers.Add("Authorization", "YELLOWFIN ts=" + DateTimeOffset.UtcNow.ToUnixTimeMilliseconds() + ", nonce=" + nonce + ", token=" + token);
            request.Headers.Add("Accept", "application/vnd.yellowfin.api-v1+json");
            request.Content = new StringContent(createUserPayload, System.Text.Encoding.UTF8, "application/json");
 
            HttpResponseMessage response = await client.SendAsync(request);
            string content = await response.Content.ReadAsStringAsync();
 
            Console.WriteLine(content);
        }
    }
     
    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(
                JsonConvert.SerializeObject(new { userName = restUsername, password = restPassword }),
                MediaTypeHeaderValue.Parse("application/json")
            );
 
            // Send request and get response
            HttpResponseMessage response = await client.SendAsync(request);
            string responseContent = await response.Content.ReadAsStringAsync();
 
            // Parse JSON response
            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");
                Environment.Exit(-1);
            }
 
            return accessToken;
        }
    }
}
Go
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"
 
        createUserPayload := `[{
                "userId": "user1",
                "emailAddress": "user1@yellowfin.com.au",
                "roleCode": "Consumer & Collaborator",
                "password": "test",
                "firstName": "User",
                "lastName": "One",
                "languageCode": "EN",
                "timeZoneCode": "AUSTRALIA/SYDNEY"
        }]`
 
        token, err := generateToken(host, restUsername, restPassword)
        if err != nil {
                fmt.Println("Error generating token:", err)
                return
        }
 
        fmt.Println("Payload:", createUserPayload)
 
        client := &http.Client{}
        request, err := http.NewRequest("POST", host+"/api/admin/users", bytes.NewBuffer([]byte(createUserPayload)))
        if err != nil {
                fmt.Println("Error creating request:", err)
                return
        }
 
        request.Header.Set("Authorization", fmt.Sprintf("YELLOWFIN ts=%d, nonce=%d, token=%s", time.Now().UnixMilli(), rand.Int63(), token))
        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 {
                fmt.Println("Error sending request:", err)
                return
        }
        defer response.Body.Close()
 
        body, err := ioutil.ReadAll(response.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
}
JavaScript
const fetch = require("node-fetch");
 
async function main() {
    const host = "http://localhost:8080/Yellowfin";
    const restUsername = "admin@yellowfin.com.au";
    const restPassword = "test";
 
    const createUserPayload = JSON.stringify([{
        userId: "user1",
        emailAddress: "user1@yellowfin.com.au",
        roleCode: "Consumer & Collaborator",
        password: "test",
        firstName: "User",
        lastName: "One",
        languageCode: "EN",
        timeZoneCode: "AUSTRALIA/SYDNEY"
    }]);
 
    const token = await generateToken(host, restUsername, restPassword);
 
    if (token === null) {
        console.error("Failed to retrieve access token");
        return;
    }
 
    console.log("Payload:", createUserPayload);
 
    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/admin/users`, {
            method: 'POST',
            headers: headers,
            body: createUserPayload
        });
 
        if (!response.ok) {
            throw new Error(`HTTP error! Status: ${response.status}`);
        }
 
        const responseBody = await response.text();
        console.log(responseBody);
    } catch (error) {
        console.error("Error:", error.message);
    }
}
 
async function generateToken(host, restUsername, restPassword) {
    // Generate nonce
    const nonce = Math.floor(Math.random() * Number.MAX_SAFE_INTEGER);
 
    // Create request headers
    const headers = {
        'Authorization': `YELLOWFIN ts=${Date.now()}, nonce=${nonce}`,
        'Accept': 'application/vnd.yellowfin.api-v1+json',
        'Content-Type': 'application/json'
    };
 
    // Create request body
    const body = JSON.stringify({
        userName: restUsername,
        password: restPassword
    });
 
    try {
        // Make POST request
        const response = await fetch(`${host}/api/refresh-tokens`, {
            method: 'POST',
            headers: headers,
            body: body
        });
 
        // Check if request was successful
        if (!response.ok) {
            throw new Error(`HTTP error! Status: ${response.status}`);
        }
 
        // Parse JSON response
        const jsonResponse = await response.json();
        const accessToken = jsonResponse._embedded.accessToken.securityToken;
 
        if (accessToken) {
            console.log(`Access Token: ${accessToken}`);
        } else {
            console.log("Token not retrieved");
        }
 
        return accessToken;
    } catch (error) {
        console.error("Error:", error.message);
    }
 
    return null;
}
 
main();
PHP
<?php
function main() {
    $host = "http://localhost:8080/Yellowfin";
    $restUsername = "admin@yellowfin.com.au";
    $restPassword = "test";
 
    $createUserPayload = json_encode(array(
        array(
            "userId" => "user1",
            "emailAddress" => "user1@yellowfin.com.au",
            "roleCode" => "Consumer & Collaborator",
            "password" => "test",
            "firstName" => "User",
            "lastName" => "One",
            "languageCode" => "EN",
            "timeZoneCode" => "AUSTRALIA/SYDNEY"
        )
    ));
 
    try {
        $token = generateToken($host, $restUsername, $restPassword);
    } catch (Exception $e) {
        echo "Error generating token: " . $e->getMessage();
        return;
    }
 
    echo "Payload: " . $createUserPayload . "\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('POST', "$host/api/admin/users", $headers, $createUserPayload);
        echo $response;
    } catch (Exception $e) {
        echo "Error sending request: " . $e->getMessage();
    }
}
 
function generateToken($host, $restUsername, $restPassword) {
    // Generate nonce
    $nonce = mt_rand();
 
    // Create request body
    $requestBody = json_encode(array(
        "userName" => $restUsername,
        "password" => $restPassword
    ));
 
    // Create request headers
    $headers = array(
        'Authorization: YELLOWFIN ts=' . intval(microtime(true) * 1000) . ', nonce=' . $nonce,
        'Accept: application/vnd.yellowfin.api-v1+json',
        'Content-Type: application/json'
    );
 
    $response = httpRequest('POST', "$host/api/refresh-tokens", $headers, $requestBody);
 
    // Parse JSON response
    $jsonResponse = json_decode($response, true);
 
    // Get access token from response
    if (isset($jsonResponse["_embedded"]["accessToken"]["securityToken"])) {
        $accessToken = $jsonResponse["_embedded"]["accessToken"]["securityToken"];
        echo "Access Token: " . $accessToken;
 
        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()
?>
Python
import json
import random
import time
 
import requests
 
def main():
    host = "http://localhost:8080/Yellowfin"
    rest_username = "admin@yellowfin.com.au"
    rest_password = "test"
 
    create_user_payload = json.dumps([{
        "userId": "user1",
        "emailAddress": "user1@yellowfin.com.au",
        "roleCode": "Consumer & Collaborator",
        "password": "test",
        "firstName": "User",
        "lastName": "One",
        "languageCode": "EN",
        "timeZoneCode": "AUSTRALIA/SYDNEY"
    }])
 
    try:
        token = generate_token(host, rest_username, rest_password)
    except Exception as e:
        print(f"Error generating token: {e}")
        return
 
    print("Payload:", create_user_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.post(host + "/api/admin/users", headers=headers, data=create_user_payload)
        response.raise_for_status()
        print(response.text)
    except requests.RequestException as e:
        print(f"Error sending request: {e}")
 
 
def generate_token(host, rest_username, rest_password):
    nonce = random.randint(0, 2 ** 63 - 1)
 
    # Create request body
    request_body = json.dumps({
        "userName": rest_username,
        "password": rest_password
    })
 
    # Create request headers
    headers = {
        'Authorization': f'YELLOWFIN ts={int(time.time() * 1000)}, nonce={nonce}',
        'Accept': 'application/vnd.yellowfin.api-v1+json',
        'Content-Type': 'application/json'
    }
 
    # Send HTTP request
    response = requests.post(host + "/api/refresh-tokens", headers=headers, data=request_body)
 
    # Check response status
    if response.status_code == 200:
        # Parse JSON response
        json_response = response.json()
        access_token = json_response["_embedded"]["accessToken"]["securityToken"]
        print("Access Token:", access_token)
 
        return access_token
    else:
        raise Exception("Token not retrieved successfully")
 
if __name__ == "__main__":
    main()

ユーザーの更新

ユーザーの更新では、上記と同じJSON モデルが使用されます。必要な変更を含むモデルは、PATCH /api/admin/users/{userId} Update a User で使用できます。ここでは、{userId} は、GET /api/rpc/users/user-details-by-username/{user-name} で返される整数識別子です。

ユーザーJSONモデルの配列を受け入れることができるユーザー作成エンドポイントと比較して、更新エンドポイントは1つのユーザーJSONモデルのみをサポートします。

以下の例では、様々なプログラミング言語で既存のユーザーを更新します。

こちらのJava コードの例では、REST 呼び出しとJSON シリアル化の処理に、Apache HTTP クライアントとGSONを使用しています。

Java
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 UpdateAUser {
    public static void main(String[] args) throws Exception {
 
        String host = "http://localhost:8080/yellowfinHead";
        String restUsername = "admin@yellowfin.com.au";
        String restPassword = "test";
 
        Integer userIp = 13235;
 
        String updateUserPayload =
                "{" +
                        "  \"emailAddress\": \"user1@yellowfin.com.au\"," +
                        "  \"roleCode\": \"Consumer & Collaborator\"," +
                        "  \"password\": \"test\"," +
                        "  \"firstName\": \"User\"," +
                        "  \"lastName\": \"Two\"," +
                        "  \"languageCode\": \"EN\"," +
                        "  \"timeZoneCode\": \"AUSTRALIA/SYDNEY\" +
                        "}";
 
        String token = generateToken(host, restUsername, restPassword);
 
        System.out.println("Payload: " + updateUserPayload);
 
        Content c = Request.patch(host + "/api/admin/users/" + userIp)
                .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(updateUserPayload, null)
                .execute().returnContent();
 
        System.out.print(c.asString());
 
    }
 
    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();
 
    }
 
}
C#
namespace YellowfinAPIExamples
{
    using System;
    using System.Net.Http;
    using System.Net.Http.Headers;
    using System.Threading.Tasks;
    using Newtonsoft.Json;
    using Newtonsoft.Json.Linq;
 
    class UpdateAUser
    {
        static async Task Main(string[] args)
        {
            string host = "http://localhost:8080/yellowfinHead";
            string restUsername = "admin@yellowfin.com.au";
            string restPassword = "test";
 
            int userIp = 13235;
 
            string updateUserPayload = JsonConvert.SerializeObject(new
            {
                emailAddress = "user1@yellowfin.com.au",
                roleCode = "Consumer & Collaborator",
                password = "test",
                firstName = "User",
                lastName = "Two",
                languageCode = "EN",
                timeZoneCode = "AUSTRALIA/SYDNEY"
            });
 
            string token = await GenerateToken(host, restUsername, restPassword);
 
            using (var client = new HttpClient())
            {
                // Generate nonce
                long nonce = new Random().NextInt64();
 
                // Create HTTP request
                var request = new HttpRequestMessage(HttpMethod.Patch, $"{host}/api/admin/users/{userIp}");
                request.Headers.Add("Authorization", $"YELLOWFIN ts={DateTimeOffset.UtcNow.ToUnixTimeMilliseconds()} , nonce={nonce}, token={token}");
                request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/vnd.yellowfin.api-v1+json"));
                request.Content = new StringContent(updateUserPayload, System.Text.Encoding.UTF8, "application/json");
 
                // Send request and get response
                HttpResponseMessage response = await client.SendAsync(request);
                string responseContent = await response.Content.ReadAsStringAsync();
 
                Console.WriteLine(responseContent);
            }
        }
 
        public static async Task<string> GenerateToken(string host, string username, string password)
        {
            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.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"
                );
 
                // Send request and get response
                HttpResponseMessage response = await client.SendAsync(request);
                string responseContent = await response.Content.ReadAsStringAsync();
 
                // Parse JSON response
                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;
            }
        }
    }
}
Go
package main
 
import (
    "bytes"
    "encoding/json"
    "fmt"
    "io/ioutil"
    "math/rand"
    "net/http"
    "time"
)
 
func main() {
    host := "http://localhost:8080/yellowfinHead"
    restUsername := "admin@yellowfin.com.au"
    restPassword := "test"
    userIp := 13235
 
    updateUserPayload := map[string]string{
        "emailAddress": "user1@yellowfin.com.au",
        "roleCode":     "Consumer & Collaborator",
        "password":     "test",
        "firstName":    "User",
        "lastName":     "Two",
        "languageCode": "EN",
        "timeZoneCode": "AUSTRALIA/SYDNEY",
    }
 
    token, err := generateToken(host, restUsername, restPassword)
    if err != nil {
        fmt.Println("Error generating token:", err)
        return
    }
 
    payloadBytes, err := json.Marshal(updateUserPayload)
    if err != nil {
        fmt.Println("Error marshaling payload:", err)
        return
    }
 
    nonce := rand.Int63()
 
    client := &http.Client{}
    request, err := http.NewRequest("PATCH", fmt.Sprintf("%s/api/admin/users/%d", host, userIp), bytes.NewBuffer(payloadBytes))
    if err != nil {
        fmt.Println("Error creating request:", err)
        return
    }
 
    request.Header.Set("Authorization", fmt.Sprintf("YELLOWFIN ts=%d, nonce=%d, token=%s", time.Now().UnixMilli(), nonce, token))
    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 {
        fmt.Println("Error sending request:", err)
        return
    }
    defer response.Body.Close()
 
    responseBody, err := ioutil.ReadAll(response.Body)
    if err != nil {
        fmt.Println("Error reading response body:", err)
        return
    }
 
    fmt.Print(string(responseBody))
}
 
func generateToken(host, username, password string) (string, error) {
    requestBody, err := json.Marshal(map[string]string{
        "userName": username,
        "password": password,
    })
    if err != nil {
        return ", fmt.Errorf("error marshaling request body: %v", err)
    }
 
    nonce := rand.Int63()
 
    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{}
    err = json.Unmarshal(responseBody, &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")
    }
 
    fmt.Println("Access Token:", accessToken)
    return accessToken, nil
}
JavaScript
const fetch = require('node-fetch');
 
async function main() {
    const host = "http://localhost:8080/yellowfinHead";
    const restUsername = "admin@yellowfin.com.au";
    const restPassword = "test";
    const userIp = 13235;
 
    const updateUserPayload = JSON.stringify({
        emailAddress: "user1@yellowfin.com.au",
        roleCode: "Consumer & Collaborator",
        password: "test",
        firstName: "User",
        lastName: "Four",
        languageCode: "EN",
        timeZoneCode: "AUSTRALIA/SYDNEY"
    });
 
    const token = await generateToken(host, restUsername, restPassword);
 
    console.log("Payload:", updateUserPayload);
 
    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/admin/users/${userIp}`, {
            method: 'PATCH',
            headers: headers,
            body: updateUserPayload
        });
 
        if (!response.ok) {
            throw new Error(`HTTP error! Status: ${response.status}`);
        }
 
        const responseBody = await response.text();
        console.log(responseBody);
    } catch (error) {
        console.error("Error:", error.message);
    }
}
 
async function generateToken(host, username, password) {
    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: username,
        password: password
    });
 
    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 successfully");
            process.exit(-1);
        }
    } catch (error) {
        console.error("Error:", error.message);
        process.exit(-1);
    }
}
 
main();
PHP
<?php
 
function main()
{
    $host = "http://localhost:8080/yellowfinHead";
    $restUsername = "admin@yellowfin.com.au";
    $restPassword = "test";
    $userIp = 13235;
 
    $updateUserPayload = json_encode(array(
        "emailAddress" => "user1@yellowfin.com.au",
        "roleCode" => "Consumer & Collaborator",
        "password" => "test",
        "firstName" => "User",
        "lastName" => "Two",
        "languageCode" => "EN",
        "timeZoneCode" => "AUSTRALIA/SYDNEY"
    ));
 
    $token = generateToken($host, $restUsername, $restPassword);
 
    echo "Payload: " . $updateUserPayload . PHP_EOL;
 
    $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('PATCH', "$host/api/admin/users/$userIp", $headers, $updateUserPayload);
 
    echo $response . PHP_EOL;
}
 
function generateToken($host, $username, $password)
{
    $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'
    );
 
    $body = json_encode(array(
        "userName" => $username,
        "password" => $password
    ));
 
    $response = httpRequest('POST', "$host/api/refresh-tokens", $headers, $body);
 
    $jsonResponse = json_decode($response, true);
 
    if (isset($jsonResponse["_embedded"]["accessToken"]["securityToken"])) {
        $accessToken = $jsonResponse["_embedded"]["accessToken"]["securityToken"];
        echo "Access Token: " . $accessToken . PHP_EOL;
        return $accessToken;
    } else {
        echo "Token not retrieved successfully" . PHP_EOL;
        exit(-1);
    }
}
 
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();
?>
Python
import json
import random
import time
import requests
 
def main():
    host = "http://localhost:8080/yellowfinHead"
    rest_username = "admin@yellowfin.com.au"
    rest_password = "test"
    user_ip = 13235
 
    update_user_payload = json.dumps({
        "emailAddress": "user1@yellowfin.com.au",
        "roleCode": "Consumer & Collaborator",
        "password": "test",
        "firstName": "User",
        "lastName": "Seven",
        "languageCode": "EN",
        "timeZoneCode": "AUSTRALIA/SYDNEY"
    })
 
    token = generate_token(host, rest_username, rest_password)
 
    print("Payload:", update_user_payload)
 
    headers = {
        'Authorization': f'YELLOWFIN ts={int(time.time() * 1000)}, nonce={random.randint(0, 2**63 - 1)}, token={token}',
        'Accept': 'application/vnd.yellowfin.api-v1+json',
        'Content-Type': 'application/json'
    }
 
    response = requests.patch(f"{host}/api/admin/users/{user_ip}", headers=headers, data=update_user_payload)
 
    print(response.text)
 
def generate_token(host, username, password):
    headers = {
        'Authorization': f'YELLOWFIN ts={int(time.time() * 1000)}, nonce={random.randint(0, 2**63 - 1)}',
        'Accept': 'application/vnd.yellowfin.api-v1+json',
        'Content-Type': 'application/json'
    }
 
    body = json.dumps({
        "userName": username,
        "password": password
    })
 
    response = requests.post(f"{host}/api/refresh-tokens", headers=headers, data=body)
 
    if response.status_code == 200:
        json_response = response.json()
        access_token = json_response["_embedded"]["accessToken"]["securityToken"]
        print("Access Token:", access_token)
        return access_token
    else:
        print("Token not retrieved successfully")
        exit(-1)
 
if __name__ == "__main__":
    main()

ユーザーロールの変更

ユーザーのロールは、標準の更新エンドポイントで更新できます。これは、PATCH /api/admin/users/{userId} Update a User を呼び出すときに、ユーザーJSONモデルにroleCodeを設定することで実現できます。

以下の例では、利用可能なロールを取得するためのGET /api/roles エンドポイントを紹介します。こちらのコード例では、ユーザーのロールをGET /api/roles によって返された最初のロールに変更します。

以下の例では、様々なプログラミング言語でユーザーのロールを変更します。

Java
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 UpdateUsersRole {
    public static void main(String[] args) throws Exception {
 
        String host = "http://localhost:8080/Yellowfin";
        String restUsername = "admin@yellowfin.com.au";
        String restPassword = "test";
        String userToUpdate = "user1@yellowfin.com.au";
 
        String token = generateToken(host, restUsername, restPassword);
 
        String roleCode = retrieveRole(host, token);
 
        Integer userIpId = retrieveUserIpIdForUsername(host, token, userToUpdate);
 
        String updateUserPayload =
                "{" +
                        "  \"roleCode\": \" + roleCode + "\" +
                        "}";
 
        System.out.println("Payload: " + updateUserPayload);
 
        Content c = Request.patch(host + "/api/admin/users/" + userIpId)
                .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(updateUserPayload, null)
                .execute().returnContent();
 
        System.out.print(c.asString());
 
    }
 
 
    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 returns a list of roles in the Yellowfin instance and returns the first one
     *  in the list.
     */
 
    public static String retrieveRole(String host, String token) throws IOException {
 
        Content c = Request.get(host + "/api/roles")
                .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 rolesList = jsonObject.get("items");
        JsonObject role = rolesList.getAsJsonArray().get(0).getAsJsonObject();
 
        String roleCode = null;
        if (role!=null) {
            roleCode = role.get("roleCode").getAsString();
            System.out.println("RoleCode: " + roleCode);
        } else {
            System.out.println("Role not retrieved successfully");
            System.exit(-1);
        }
        return roleCode;
 
    }
 
    /*
     *  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();
 
    }
 
}
C#
using System;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Threading.Tasks;
using Newtonsoft.Json.Linq;
 
namespace YellowfinAPIExamples
{
    public class UpdateUsersRole
    {
        public static async Task Main(string[] args)
        {
            string host = "http://localhost:8080/Yellowfin";
            string restUsername = "admin@yellowfin.com.au";
            string restPassword = "test";
            string userToUpdate = "user1@yellowfin.com.au";
 
            string token = await GenerateToken(host, restUsername, restPassword);
 
            string roleCode = await RetrieveRole(host, token);
 
            int userIpId = await RetrieveUserIpIdForUsername(host, token, userToUpdate);
 
            string updateUserPayload = $"{{ \"roleCode\": \"{roleCode}\" }}";
 
            Console.WriteLine("Payload: " + updateUserPayload);
 
            using (var client = new HttpClient())
            {
                var request = new HttpRequestMessage(HttpMethod.Patch, $"{host}/api/admin/users/{userIpId}");
                request.Headers.Add("Authorization", $"YELLOWFIN ts={DateTimeOffset.UtcNow.ToUnixTimeMilliseconds()}, nonce={new Random().NextInt64()}, token={token}");
                request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/vnd.yellowfin.api-v1+json"));
                request.Content = new StringContent(updateUserPayload, System.Text.Encoding.UTF8, "application/json");
 
                HttpResponseMessage response = await client.SendAsync(request);
                string responseContent = await response.Content.ReadAsStringAsync();
                Console.WriteLine(responseContent);
            }
        }
 
        public static async Task<int> RetrieveUserIpIdForUsername(string host, string token, string userName)
        {
            using (var client = new HttpClient())
            {
                var request = new HttpRequestMessage(HttpMethod.Get, $"{host}/api/rpc/users/user-details-by-username/{userName}");
                request.Headers.Add("Authorization", $"YELLOWFIN ts={DateTimeOffset.UtcNow.ToUnixTimeMilliseconds()}, nonce={new Random().NextInt64()}, token={token}");
                request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/vnd.yellowfin.api-v1+json"));
 
                HttpResponseMessage response = await client.SendAsync(request);
                string responseContent = await response.Content.ReadAsStringAsync();
 
                JObject jsonObject = JObject.Parse(responseContent);
                int userIpId = jsonObject["userId"].Value<int>();
 
                return userIpId;
            }
        }
 
        public static async Task<string> RetrieveRole(string host, string token)
        {
            using (var client = new HttpClient())
            {
                var request = new HttpRequestMessage(HttpMethod.Get, $"{host}/api/roles");
                request.Headers.Add("Authorization", $"YELLOWFIN ts={DateTimeOffset.UtcNow.ToUnixTimeMilliseconds()}, nonce={new Random().NextInt64()}, token={token}");
                request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/vnd.yellowfin.api-v1+json"));
 
                HttpResponseMessage response = await client.SendAsync(request);
                string responseContent = await response.Content.ReadAsStringAsync();
 
                JObject jsonObject = JObject.Parse(responseContent);
                JToken rolesList = jsonObject["items"];
                string roleCode = rolesList[0]["roleCode"].Value<string>();
 
                Console.WriteLine("RoleCode: " + roleCode);
                return roleCode;
            }
        }
 
        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($"{{ \"userName\": \"{username}\", \"password\": \"{password}\" }}", System.Text.Encoding.UTF8, "application/json");
 
                HttpResponseMessage response = await client.SendAsync(request);
                string responseContent = await response.Content.ReadAsStringAsync();
 
                JObject jsonObject = JObject.Parse(responseContent);
                string accessToken = jsonObject["_embedded"]["accessToken"]["securityToken"].Value<string>();
 
                if (!string.IsNullOrEmpty(accessToken))
                {
                    Console.WriteLine("Access Token: " + accessToken);
                }
                else
                {
                    Console.WriteLine("Token not retrieved successfully");
                    Environment.Exit(-1);
                }
                return accessToken;
            }
        }
    }
}
Go
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"
    userToUpdate := "user1@yellowfin.com.au"
 
    token, err := generateToken(host, restUsername, restPassword)
    if err != nil {
        fmt.Println("Error generating token:", err)
        return
    }
 
    roleCode, err := retrieveRole(host, token)
    if err != nil {
        fmt.Println("Error retrieving role:", err)
        return
    }
 
    userIpId, err := retrieveUserIpIdForUsername(host, token, userToUpdate)
    if err != nil {
        fmt.Println("Error retrieving user IP ID:", err)
        return
    }
 
    updateUserPayload := fmt.Sprintf(`{ "roleCode": "%s" }`, roleCode)
    fmt.Println("Payload:", updateUserPayload)
 
    client := &http.Client{}
    request, err := http.NewRequest("PATCH", fmt.Sprintf("%s/api/admin/users/%d", host, userIpId), bytes.NewBuffer([]byte(updateUserPayload)))
    if err != nil {
        fmt.Println("Error creating request:", err)
        return
    }
 
    request.Header.Set("Authorization", fmt.Sprintf("YELLOWFIN ts=%d, nonce=%d, token=%s", time.Now().UnixMilli(), rand.Int63(), token))
    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 {
        fmt.Println("Error sending request:", err)
        return
    }
    defer response.Body.Close()
 
    responseBody, err := ioutil.ReadAll(response.Body)
    if err != nil {
        fmt.Println("Error reading response body:", err)
        return
    }
 
    fmt.Println(string(responseBody))
}
 
func retrieveUserIpIdForUsername(host, token, userName string) (int, error) {
    client := &http.Client{}
    request, err := http.NewRequest("GET", fmt.Sprintf("%s/api/rpc/users/user-details-by-username/%s", host, userName), nil)
    if err != nil {
        return 0, err
    }
 
    request.Header.Set("Authorization", fmt.Sprintf("YELLOWFIN ts=%d, nonce=%d, token=%s", time.Now().UnixMilli(), rand.Int63(), token))
    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 0, err
    }
    defer response.Body.Close()
 
    responseBody, err := ioutil.ReadAll(response.Body)
    if err != nil {
        return 0, err
    }
 
    var jsonResponse map[string]interface{}
    err = json.Unmarshal(responseBody, &jsonResponse)
    if err != nil {
        return 0, err
    }
 
    userIpId, ok := jsonResponse["userId"].(float64)
    if !ok {
        return 0, fmt.Errorf("error parsing userId from response")
    }
 
    return int(userIpId), nil
}
 
func retrieveRole(host, token string) (string, error) {
    client := &http.Client{}
    request, err := http.NewRequest("GET", fmt.Sprintf("%s/api/roles", host), nil)
    if err != nil {
        return ", err
    }
 
    request.Header.Set("Authorization", fmt.Sprintf("YELLOWFIN ts=%d, nonce=%d, token=%s", time.Now().UnixMilli(), rand.Int63(), token))
    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
    }
 
    items, ok := jsonResponse["items"].([]interface{})
    if !ok || len(items) == 0 {
        return ", fmt.Errorf("error parsing roles from response")
    }
 
    role, ok := items[0].(map[string]interface{})
    if !ok {
        return ", fmt.Errorf("error parsing role from response")
    }
 
    roleCode, ok := role["roleCode"].(string)
    if !ok {
        return ", fmt.Errorf("error parsing roleCode from role")
    }
 
    fmt.Println("RoleCode:", roleCode)
    return roleCode, nil
}
 
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 ", err
    }
 
    client := &http.Client{}
    request, err := http.NewRequest("POST", fmt.Sprintf("%s/api/refresh-tokens", host), 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")
    }
 
    fmt.Println("Access Token:", accessToken)
    return accessToken, nil
}
JavaScript
const fetch = require('node-fetch');
 
async function main() {
    const host = "http://localhost:8080/Yellowfin";
    const restUsername = "admin@yellowfin.com.au";
    const restPassword = "test";
    const userToUpdate = "user1@yellowfin.com.au";
 
    const token = await generateToken(host, restUsername, restPassword);
    if (!token) {
        console.error("Failed to retrieve access token");
        return;
    }
 
    const roleCode = await retrieveRole(host, token);
    if (!roleCode) {
        console.error("Failed to retrieve role");
        return;
    }
 
    const userIpId = await retrieveUserIpIdForUsername(host, token, userToUpdate);
    if (!userIpId) {
        console.error("Failed to retrieve user IP ID");
        return;
    }
 
    const updateUserPayload = JSON.stringify({ roleCode: roleCode });
    console.log("Payload:", updateUserPayload);
 
    const headers = {
        'Authorization': `YELLOWFIN ts=${Date.now()}, nonce=${Math.floor(Math.random() * Number.MAX_SAFE_INTEGER)}, token=${token}`,
        'Accept': 'application/vnd.yellowfin.api-v1+json',
        'Content-Type': 'application/json'
    };
 
    try {
        const response = await fetch(`${host}/api/admin/users/${userIpId}`, {
            method: 'PATCH',
            headers: headers,
            body: updateUserPayload
        });
 
        if (!response.ok) {
            throw new Error(`HTTP error! Status: ${response.status}`);
        }
 
        const responseBody = await response.text();
        console.log(responseBody);
    } catch (error) {
        console.error("Error:", error.message);
    }
}
 
async function retrieveUserIpIdForUsername(host, token, userName) {
    const headers = {
        'Authorization': `YELLOWFIN ts=${Date.now()}, nonce=${Math.floor(Math.random() * Number.MAX_SAFE_INTEGER)}, 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 responseBody = await response.json();
        const userIpId = responseBody.userId;
 
        if (userIpId !== undefined) {
            return userIpId;
        } else {
            console.error("User IP ID not retrieved successfully");
            return null;
        }
    } catch (error) {
        console.error("Error:", error.message);
        return null;
    }
}
 
async function retrieveRole(host, token) {
    const headers = {
        'Authorization': `YELLOWFIN ts=${Date.now()}, nonce=${Math.floor(Math.random() * Number.MAX_SAFE_INTEGER)}, token=${token}`,
        'Accept': 'application/vnd.yellowfin.api-v1+json',
        'Content-Type': 'application/json'
    };
 
    try {
        const response = await fetch(`${host}/api/roles`, {
            method: 'GET',
            headers: headers
        });
 
        if (!response.ok) {
            throw new Error(`HTTP error! Status: ${response.status}`);
        }
 
        const responseBody = await response.json();
        const rolesList = responseBody.items;
 
        if (rolesList && rolesList.length > 0) {
            const roleCode = rolesList[0].roleCode;
            console.log("RoleCode:", roleCode);
            return roleCode;
        } else {
            console.error("Role not retrieved successfully");
            return null;
        }
    } 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.error("Token not retrieved");
            return null;
        }
    } catch (error) {
        console.error("Error:", error.message);
        return null;
    }
}
 
main();
PHP
<?php
function main() {
    $host = "http://localhost:8080/Yellowfin";
    $restUsername = "admin@yellowfin.com.au";
    $restPassword = "test";
    $userToUpdate = "user1@yellowfin.com.au";
 
    try {
        $token = generateToken($host, $restUsername, $restPassword);
    } catch (Exception $e) {
        echo "Error generating token: " . $e->getMessage();
        return;
    }
 
    try {
        $roleCode = retrieveRole($host, $token);
    } catch (Exception $e) {
        echo "Error retrieving role: " . $e->getMessage();
        return;
    }
 
    try {
        $userIpId = retrieveUserIpIdForUsername($host, $token, $userToUpdate);
    } catch (Exception $e) {
        echo "Error retrieving user IP ID: " . $e->getMessage();
        return;
    }
 
    $updateUserPayload = json_encode(array("roleCode" => $roleCode));
 
    echo "Payload: " . $updateUserPayload . "\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('PATCH', "$host/api/admin/users/$userIpId", $headers, $updateUserPayload);
        echo $response;
    } catch (Exception $e) {
        echo "Error sending request: " . $e->getMessage();
    }
}
 
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'
    );
 
    try {
        $response = httpRequest('GET', "$host/api/rpc/users/user-details-by-username/$username", $headers);
        $jsonResponse = json_decode($response, true);
        $userIpId = $jsonResponse["userId"];
        return $userIpId;
    } catch (Exception $e) {
        throw new Exception("Error retrieving user IP ID: " . $e->getMessage());
    }
}
 
function retrieveRole($host, $token) {
    $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('GET', "$host/api/roles", $headers);
        $jsonResponse = json_decode($response, true);
        $rolesList = $jsonResponse["items"];
        if (!empty($rolesList)) {
            $roleCode = $rolesList[0]["roleCode"];
            echo "RoleCode: " . $roleCode . "\n";
            return $roleCode;
        } else {
            throw new Exception("Role not retrieved successfully");
        }
    } catch (Exception $e) {
        throw new Exception("Error retrieving role: " . $e->getMessage());
    }
}
 
function generateToken($host, $restUsername, $restPassword) {
    $nonce = mt_rand();
    $requestBody = json_encode(array(
        "userName" => $restUsername,
        "password" => $restPassword
    ));
    $headers = array(
        'Authorization: YELLOWFIN ts=' . intval(microtime(true) * 1000) . ', nonce=' . $nonce,
        'Accept: application/vnd.yellowfin.api-v1+json',
        'Content-Type: application/json'
    );
 
    try {
        $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");
        }
    } catch (Exception $e) {
        throw new Exception("Error generating token: " . $e->getMessage());
    }
}
 
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();
?>
Python
import json
import random
import time
import requests
 
 
def main():
    host = "http://localhost:8080/Yellowfin"
    rest_username = "admin@yellowfin.com.au"
    rest_password = "test"
    user_to_update = "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:
        role_code = retrieve_role(host, token)
    except Exception as e:
        print(f"Error retrieving role: {e}")
        return
 
    try:
        user_ip_id = retrieve_user_ip_id_for_username(host, token, user_to_update)
    except Exception as e:
        print(f"Error retrieving user IP ID: {e}")
        return
 
    update_user_payload = json.dumps({
        "roleCode": role_code
    })
 
    print("Payload:", update_user_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.patch(f"{host}/api/admin/users/{user_ip_id}", headers=headers, data=update_user_payload)
        response.raise_for_status()
        print(response.text)
    except requests.RequestException as e:
        print(f"Error sending request: {e}")
 
 
def retrieve_user_ip_id_for_username(host, token, username):
    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.get(f"{host}/api/rpc/users/user-details-by-username/{username}", headers=headers)
        response.raise_for_status()
        json_response = response.json()
        user_ip_id = json_response["userId"]
        return user_ip_id
    except requests.RequestException as e:
        print(f"Error retrieving user IP ID: {e}")
        return None
 
 
def retrieve_role(host, token):
    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.get(f"{host}/api/roles", headers=headers)
        response.raise_for_status()
        json_response = response.json()
        roles_list = json_response["items"]
        if roles_list:
            role_code = roles_list[0]["roleCode"]
            print("RoleCode:", role_code)
            return role_code
        else:
            print("Role not retrieved successfully")
            return None
    except requests.RequestException as e:
        print(f"Error retrieving role: {e}")
        return None
 
 
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'
    }
 
    try:
        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
    except requests.RequestException as e:
        print(f"Error generating token: {e}")
        return None
 
 
if __name__ == "__main__":
    main()

ユーザーパスワードの変更

通常ユーザーのパスワードを更新できるのはユーザー自身、または十分な権限を持つシステム管理者のみです。パスワードは、PUT /api/admin/users/{userId}/password Update a User's Password を呼び出すことで更新されます。

こちらのREST 呼び出しのペイロードは、パスワード { "password": "test"} を含む単純なJSON エントリーで構成されます。

以下の例では、様々なプログラミング言語で既存のユーザーのパスワードを更新します。

Java
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 UpdateUsersPassword {
    public static void main(String[] args) throws Exception {
 
        String host = "http://localhost/yellowfinHead";
        String restUsername = "admin@yellowfin.com.au";
        String restPassword = "test";
        String userToUpdate = "user1@yellowfin.com.au";
        String newPassword = "test";
 
        String token = generateToken(host, restUsername, restPassword);;
 
        Integer userIpId = retrieveUserIpIdForUsername(host, token, userToUpdate);
 
        String updatePasswordPayload =
                "{" +
                        "  \"password\": \" + newPassword + "\" +
                        "}";
 
        System.out.println("Payload: " + updatePasswordPayload);
 
        Content c = Request.put(host + "/api/admin/users/" + userIpId + "/password")
                .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(updatePasswordPayload, null)
                .execute().returnContent();
 
        System.out.print(c.asString());
 
    }
 
 
    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();
 
    }
 
}
C#
namespace YellowfinAPIExamples
{
    using System;
    using System.Net.Http;
    using System.Net.Http.Headers;
    using System.Threading.Tasks;
    using Newtonsoft.Json;
    using Newtonsoft.Json.Linq;
 
    public class UpdateUsersPassword
    {
        static async Task Main(string[] args)
        {
            string host = "http://localhost:8080/Yellowfin";
            string restUsername = "admin@yellowfin.com.au";
            string restPassword = "test";
            string userToUpdate = "user1@yellowfin.com.au";
            string newPassword = "test";
 
            string token = await GenerateToken(host, restUsername, restPassword);
 
            int userIpId = await RetrieveUserIpIdForUsername(host, token, userToUpdate);
 
            string updatePasswordPayload = JsonConvert.SerializeObject(new { password = newPassword });
 
            Console.WriteLine("Payload: " + updatePasswordPayload);
 
            long nonce = new Random().NextInt64();
            using (var httpClient = new HttpClient())
            {
                httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("YELLOWFIN", $"ts={DateTimeOffset.UtcNow.ToUnixTimeMilliseconds()} , nonce={nonce}, token={token}");
                httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/vnd.yellowfin.api-v1+json"));
 
                HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Put, $"{host}/api/admin/users/{userIpId}/password")
                {
                    Content = new StringContent(updatePasswordPayload, System.Text.Encoding.UTF8, "application/json")
                };
 
                HttpResponseMessage response = await httpClient.SendAsync(request);
                if (response.IsSuccessStatusCode)
                {
                    string responseBody = await response.Content.ReadAsStringAsync();
                    Console.WriteLine(responseBody);
                }
                else
                {
                    Console.WriteLine("Failed to update user password. Status code: " + response.StatusCode);
                }
            }
        }
 
        static async Task<int> RetrieveUserIpIdForUsername(string host, string token, string userName)
        {
            long nonce = new Random().NextInt64();
            using (var httpClient = new HttpClient())
            {
                httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("YELLOWFIN", $"ts={DateTimeOffset.UtcNow.ToUnixTimeMilliseconds()} , nonce={nonce}, 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
                {
                    throw new Exception("Failed to retrieve user IP ID. Status code: " + response.StatusCode);
                }
            }
        }
 
        static async Task<string> GenerateToken(string host, string restUsername, string restPassword)
        {
            using (var client = new HttpClient())
            {
                long nonce = new Random().NextInt64();
 
                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(
                    JsonConvert.SerializeObject(new { userName = restUsername, password = restPassword }),
                    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");
                    Environment.Exit(-1);
                }
 
                return accessToken;
            }
        }
    }
}
Go
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"
    userToUpdate := "user1@yellowfin.com.au"
    newPassword := "test"
 
    token, err := generateToken(host, restUsername, restPassword)
    if err != nil {
        fmt.Println("Error generating token:", err)
        return
    }
 
    userIpId, err := retrieveUserIpIdForUsername(host, token, userToUpdate)
    if err != nil {
        fmt.Println("Error retrieving user IP ID:", err)
        return
    }
 
    updatePasswordPayload := map[string]string{
        "password": newPassword,
    }
    payloadBytes, err := json.Marshal(updatePasswordPayload)
    if err != nil {
        fmt.Println("Error marshaling payload:", err)
        return
    }
 
    fmt.Println("Payload:", string(payloadBytes))
 
    nonce := rand.Int63()
    client := &http.Client{}
    req, err := http.NewRequest("PUT", fmt.Sprintf("%s/api/admin/users/%d/password", host, userIpId), bytes.NewBuffer(payloadBytes))
    if err != nil {
        fmt.Println("Error creating request:", err)
        return
    }
 
    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 retrieveUserIpIdForUsername(host, token, userName string) (int, error) {
    nonce := rand.Int63()
    client := &http.Client{}
    req, err := http.NewRequest("GET", fmt.Sprintf("%s/api/rpc/users/user-details-by-username/%s", host, userName), nil)
    if err != nil {
        fmt.Println("Error creating request:", err)
        return 0, 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 {
        fmt.Println("Error sending request:", err)
        return 0, err
    }
    defer resp.Body.Close()
 
    body, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        fmt.Println("Error reading response body:", err)
        return 0, err
    }
 
    var jsonResponse map[string]interface{}
    if err := json.Unmarshal(body, &jsonResponse); err != nil {
        fmt.Println("Error parsing JSON response:", err)
        return 0, err
    }
 
    userIpId, ok := jsonResponse["userId"].(float64)
    if !ok {
        return 0, fmt.Errorf("Failed to retrieve user ID")
    }
 
    return int(userIpId), 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 {
        fmt.Println("Error marshaling request body:", err)
        return ", err
    }
 
    client := &http.Client{}
    request, err := http.NewRequest("POST", host+"/api/refresh-tokens", bytes.NewBuffer(requestBody))
    if err != nil {
        fmt.Println("Error creating request:", err)
        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 {
        fmt.Println("Error sending request:", err)
        return ", err
    }
    defer response.Body.Close()
 
    responseBody, err := ioutil.ReadAll(response.Body)
    if err != nil {
        fmt.Println("Error reading response body:", err)
        return ", err
    }
 
    var jsonResponse map[string]interface{}
    if err := json.Unmarshal(responseBody, &jsonResponse); err != nil {
        fmt.Println("Error parsing JSON response:", err)
        return ", 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
}
JavaScript
const fetch = require("node-fetch");
 
async function main() {
    const host = "http://localhost:8080/Yellowfin";
    const restUsername = "admin@yellowfin.com.au";
    const restPassword = "test";
    const userToUpdate = "user1@yellowfin.com.au";
    const newPassword = "test";
 
    const token = await generateToken(host, restUsername, restPassword);
 
    if (token === null) {
        console.error("Failed to retrieve access token");
        return;
    }
 
    const userIpId = await retrieveUserIpIdForUsername(host, token, userToUpdate);
 
    const updatePasswordPayload = `{"password": "${newPassword}"}`;
 
    console.log("Payload:", updatePasswordPayload);
 
    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/admin/users/${userIpId}/password`, {
            method: 'PUT',
            headers: headers,
            body: updatePasswordPayload
        });
 
        if (!response.ok) {
            throw new Error(`HTTP error! Status: ${response.status}`);
        }
 
        const responseBody = await response.text();
        console.log(responseBody);
    } catch (error) {
        console.error("Error:", error.message);
    }
}
 
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 jsonResponse = await response.json();
        const userIpId = jsonResponse.userId;
 
        return userIpId;
    } 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}`);
        } else {
            console.log("Token not retrieved");
        }
 
        return accessToken;
    } catch (error) {
        console.error("Error:", error.message);
    }
 
    return null;
}
 
main();
PHP
<?php
function main() {
    $host = "http://localhost:8080/Yellowfin";
    $restUsername = "admin@yellowfin.com.au";
    $restPassword = "test";
    $userToUpdate = "user1@yellowfin.com.au";
    $newPassword = "test";
 
    try {
        $token = generateToken($host, $restUsername, $restPassword);
    } catch (Exception $e) {
        echo "Error generating token: " . $e->getMessage();
        return;
    }
 
    $userIpId = retrieveUserIpIdForUsername($host, $token, $userToUpdate);
 
    $updatePasswordPayload = '{"password": "' . $newPassword . '"}';
 
    echo "Payload: " . $updatePasswordPayload . "\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('PUT', "$host/api/admin/users/$userIpId/password", $headers, $updatePasswordPayload);
        echo $response;
    } catch (Exception $e) {
        echo "Error sending request: " . $e->getMessage();
    }
}
 
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'
    );
 
    try {
        $response = httpRequest('GET', "$host/api/rpc/users/user-details-by-username/$userName", $headers);
        $jsonResponse = json_decode($response, true);
        $userIpId = $jsonResponse["userId"];
 
        return $userIpId;
    } catch (Exception $e) {
        echo "Error: " . $e->getMessage();
    }
 
    return null;
}
 
function generateToken($host, $restUsername, $restPassword) {
    // Generate nonce
    $nonce = mt_rand();
 
    // Create request body
    $requestBody = json_encode(array(
        "userName" => $restUsername,
        "password" => $restPassword
    ));
 
    // Create request headers
    $headers = array(
        'Authorization: YELLOWFIN ts=' . intval(microtime(true) * 1000) . ', nonce=' . $nonce,
        'Accept: application/vnd.yellowfin.api-v1+json',
        'Content-Type: application/json'
    );
 
    $response = httpRequest('POST', "$host/api/refresh-tokens", $headers, $requestBody);
 
    // Parse JSON response
    $jsonResponse = json_decode($response, true);
 
    // Get access token from response
    if (isset($jsonResponse["_embedded"]["accessToken"]["securityToken"])) {
        $accessToken = $jsonResponse["_embedded"]["accessToken"]["securityToken"];
        echo "Access Token: " . $accessToken;
 
        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();
?>
Python
import json
import random
import time
import requests
 
def main():
    host = "http://localhost:8080/Yellowfin"
    rest_username = "admin@yellowfin.com.au"
    rest_password = "test"
    user_to_update = "user1@yellowfin.com.au"
    new_password = "test"
 
    try:
        token = generate_token(host, rest_username, rest_password)
    except Exception as e:
        print(f"Error generating token: {e}")
        return
 
    user_ip_id = retrieve_user_ip_id_for_username(host, token, user_to_update)
 
    update_password_payload = '{"password": "' + new_password + '"}'
 
    print("Payload:", update_password_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.put(f"{host}/api/admin/users/{user_ip_id}/password", headers=headers, data=update_password_payload)
        response.raise_for_status()
        print(response.text)
    except requests.RequestException as e:
        print(f"Error sending request: {e}")
 
 
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'
    }
 
    try:
        response = requests.get(f"{host}/api/rpc/users/user-details-by-username/{user_name}", headers=headers)
        response.raise_for_status()
        json_response = response.json()
        user_ip_id = json_response["userId"]
        return user_ip_id
    except requests.RequestException as e:
        print(f"Error: {e}")
 
    return None
 
 
def generate_token(host, rest_username, rest_password):
    nonce = random.randint(0, 2 ** 63 - 1)
 
    # Create request body
    request_body = json.dumps({
        "userName": rest_username,
        "password": rest_password
    })
 
    # Create request headers
    headers = {
        'Authorization': f'YELLOWFIN ts={int(time.time() * 1000)}, nonce={nonce}',
        'Accept': 'application/vnd.yellowfin.api-v1+json',
        'Content-Type': 'application/json'
    }
 
    # Send HTTP request
    try:
        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
    except requests.RequestException as e:
        raise Exception("Token not retrieved successfully") from e
 
 
if __name__ == "__main__":
    main()