APIからRealmを追加

Env Keycloak: 11.0.3

Get token

def get_token():
    url = f"{BASE_URL}/auth/realms/master/protocol/openid-connect/token"

    realm = "your-realm"
    username = "your-admin-user-name"
    password = "your-admin-password"
    client_id = "client-id"
    payload=f'client_secret={realm}&username={username}&password={password}&grant_type=password&client_id={client_id}'
    headers = {
        'Content-Type': 'application/x-www-form-urlencoded'
    }

    response = requests.request("POST", url, headers=headers, data=payload)
    return response.json()['access_token']

Create realm

def create_new_realm(id, realm, token):
    payload = { "id": id, "realm" : realm, "enabled" : True }
    url = f"{BASE_URL}/auth/admin/realms"
    headers = {
        'Authorization': 'Bearer ' + token,
        'Content-Type': 'application/json'
    }
    print(payload)
    response = requests.request("POST", url, headers=headers, data= json.dumps( payload))
    print(response)

WSL2にIntellijをインストールする

WSL2にIntellijをインストールする Ubuntu20.04をインストールし、WSL2にしておく

sudo apt update

X windowをインストール
sudo apt install xfce4 (LightDMを選択)

windows にVcXSrvをインストール VcXSrvの設定は以下を参考

qiita.com

.bashrcに以下を追記
export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):0

bashrcを再読み込み source ~/.bashrc

JetBrains tool boxをDL

インストール
sudo tar -xzf jetbrains-toolbox-*.tar.gz -C /usr/local/bin --strip-components 1

toolboxを起動
jetbrains-toolbox

azreu storage V12を使う方法

const { BlobServiceClient } = require('@azure/storage-blob');


const ConnectionString = "";

async function main() {
    console.log('Azure Blob storage v12 - JavaScript quickstart sample');
    // Quick start code goes here
    const list = await listBlobs("blob-name");
    list.forEach(element => {
        console.log(element);
    });
}


async function download(containerName: string, blobName: string) {
    const blobServiceClient = BlobServiceClient.fromConnectionString(ConnectionString);
    const containerClient = blobServiceClient.getContainerClient(containerName);
    const blockBlobClient = containerClient.getBlockBlobClient(blobName);
    const blobDownloadResponse = await blockBlobClient.download(0);
    return blobDownloadResponse.readableStreamBody;
}

async function upload(containerName: string, blobName: string, data: string) {
    const blobServiceClient = BlobServiceClient.fromConnectionString(ConnectionString);
    const containerClient = blobServiceClient.getContainerClient(containerName);
    const blockBlobClient = containerClient.getBlockBlobClient(blobName);
    const uploadBlobResponse = await blockBlobClient.upload(data, data.length);
    return uploadBlobResponse.requestId;
}

async function createContainers(containerName: string) {
    const blobServiceClient = BlobServiceClient.fromConnectionString(ConnectionString);
    const containerClient = blobServiceClient.getContainerClient(containerName);
    try {
        const createContainersResponse = await containerClient.create();
        return createContainersResponse.requestId;
    } catch (e) {
        console.log(e);
    }
}

async function deleteContainers(containerName: string) {
    const blobServiceClient = BlobServiceClient.fromConnectionString(ConnectionString);
    const containerClient = blobServiceClient.getContainerClient(containerName);
    return await containerClient.delete();
}

async function listBlobs(containerName: string) {
    const blobServiceClient = BlobServiceClient.fromConnectionString(ConnectionString);
    const containerClient = blobServiceClient.getContainerClient(containerName);
    const blobs = [];
    for await (const blob of containerClient.listBlobsFlat()) {
      blobs.push(blob.name);
    }
    return blobs;
}

async function doesContainerExist(containerName: string) {
    const blobServiceClient = BlobServiceClient.fromConnectionString(ConnectionString);
    const containerClient = blobServiceClient.getContainerClient(containerName);
    return containerClient.exists();
}

main().then(() => console.log('Done')).catch((ex) => console.log(ex.message));

Azure storage tableから1000件以上のデータを取得する方法

queryEntitiesは最大1000件までしか取得できない。 continuationTokeを使うことで1000件以上のデータを取得することができる

exports.getDataFromStorageServiceAsync = async function getAllFromTable(key) {
    let account = "";
    let access_key = "";
    var tableService = azure.createTableService(account, access_key);
    var query = new azure.TableQuery()
        .where('PartitionKey eq ?', key);
    var continuationToken = null;
    var entities = [];
    do {
        var results = await queryEntitiesSegmented(process.env["TABLE_NAME"], tableService, query, continuationToken);
        continuationToken = results.continuationToken;
        entities.push.apply(entities, results.entries);
    }
    while (continuationToken != null);
    return entities;
}

const queryEntitiesSegmented = async (table, tableService, tableQuery, continuationToken) => {
    return new Promise((resolve, reject) => {
        tableService.queryEntities(table, tableQuery, continuationToken, (error, results) => {
            if (error) { reject(error); }
            else { resolve(results); }
        });
    });
}