Как использовать CF-клиент с токеном пользователя E2E

Я хочу использовать библиотеку go-cfclient для подключения к Cloud Foundry и проверки приложений и т.д.

Мне удалось подключиться к Java/Node/Go, используя явный пароль пользователя в коде.

Теперь я хочу, чтобы имитировать сценарий с использованием токена, то есть вместо использования моего пароля, используйте мой токен пользователя для имитации соединения.

Как я могу добиться такого моделирования?

Предпочтительно в go-cfclient или Node.

Обновить

Мне нужен реальный пример E2E с маркером CF, в котором пользователь использует некоторый примерный пользовательский интерфейс и, возможно, предоставляет некоторые учетные данные в первый раз, но все последующие запросы должны работать только с маркером CF.

Мне нужен этот пример в Голанге.

Ответ 1

Вы можете найти типичную последовательность обработки маркера OAuth2 для CF из приведенной ниже ссылки. Для использования этого токена для другого вызова API вы также можете обратиться к другим тестовым примерам.

https://github.com/cloudfoundry-community/go-cfclient/blob/a0a191bdc19a7a7189c050444aeaf20d2a125875/client_test.go#L117

Во всяком случае, это токен OAuth2, истекший после истечения срока его действия. Вы не можете избежать логина с пользователем /pass, если вы не обновите его в течение срока действия.

ОБНОВЛЕНО

Вы уже сказали, что можете войти в систему с именем пользователя и паролем, поэтому вам нужно просто получить токен с вызовом API для него. что-то вроде:

c := &Config{
    ApiAddress: myApiAddress,
    Username:   "foo",
    Password:   "bar",
}

client, err1 := NewClient(c)
if err1 != nil {
    // error handling for connection failure
}
// you already reach here. right?

token, err2 := client.GetToken()
if err2 != nil {
    // error handling for token retreive failure
}

// just do what you want with token

вы можете найти, что происходит под капотом, проверив источник: https://github.com/cloudfoundry-community/go-cfclient/blob/a0a191bdc19a7a7189c050444aeaf20d2a125875/client.go#L375

для получения дополнительной информации jsut попытается распечатать структуру client:

fmt.Printf("client: %v\n", client)

то я думаю, вы можете найти больше информации.

Ответ 2

Я всегда хотел бы написать Wrapper-Script используя Powershell или в Bash scripting Language

Ваш CF-CLI оставляет всю регистрационную информацию в ~\.cf\config.json и чтение этого языка скрипта очень простое и не требует больших усилий по программированию.

В моем случае я использовал это для переключения между разными основаниями. Скрипт My Powershell выполнит эту команду ./cfwrapper switch

Function SwitchFoundation () {

    Write-Host 'Which Foundation You would like to Switch ??''n
    $foundationNumber = FoundationPrompt
    $foundationIndex = $foundationNumber-1
    $foundations = $foundationsJsonSettings
    $foundation = $foundations[$foundationIndex]


    if ($foundation -ne $null) {
        if (Test-Path $configPath$foundationNumber) {
            Write-Host 'You are now getting Switched to another Foundation. Please wait for a moment''n
            CopyConfig ($foundationNumber) ('reverse')
            cf target
        }else {
            Write-Host 'Your login to this Foundation is not found. Kindly do a Fresh login below''n
            CFLoginSSOCommand ($foundationNumber) ($foundation.api_url)
        }

    } else {
        Write-Host 'Foundation Number is wrong. Please retry..'
    }


}

Function CFLoginSSOCommand ($foundationNumber,$apiUrl) {
    Write-Host 'Logout command will be executed blankly to flush out all your current Logins'
    cf logout
    cf login --sso -a $apiUrl
    CopyConfig($foundationNumber)


}

Function CopyConfig($foundationNumber, $flag) {
    Write-Host 'Copying Config Path'
    if ($flag -eq 'reverse') {
        Copy-Item -Path $configPath$foundationNumber -Destination $configPath
    }else {
        Copy-Item -Path $configPath -Destination $configPath$foundationNumber
    }

}

Короче говоря, CF-CLI имеет все необходимые команды. Все, что нам нужно, это написать простую обертку вокруг него.