nu-modules/sc.nu

132 lines
4.0 KiB
Plaintext

use ~/bin/nu_scripts/ht.nu
use ~/bin/nu_scripts/jwt.nu
use ~/bin/nu_scripts/credm.nu
def token-name [] {
$"($env.XS_SF_ACCOUNT).token"
}
export def request-token [] {
credm get $env.XS_SF_ACCOUNT
| select login password
| rename username password
| to json
| ht post (ht with-path $env.XS_SF_URL "/1/rest/accounts/authentication/requesttoken")
| from json
}
def today [] {
date now | format date "%Y%m%d"
}
export def request-tenant-key [] {
let token = (request-token)
let tenant_id = ($token | get token | jwt parse | get payload.tenantId)
let url = (ht with-path $env.XS_SF_URL $"/1/rest/security/keyvault/key/($tenant_id)/(today)")
ht get $url --bearer $token.token
}
def sc-get [path:string] {
^xh get -A bearer -a $"(provide-access-token)" (ht with-path $env.XS_SF_URL $path) | from json
}
def sc-post [path:string] {
^xh post -A bearer -a $"(provide-access-token)" (ht with-path $env.XS_SF_URL $path) | from json
}
def sc-put [path:string] {
^xh put -A bearer -a $"(provide-access-token)" (ht with-path $env.XS_SF_URL $path) | from json
}
def sc-delete [path:string] {
^xh delete -A bearer -a $"(provide-access-token)" (ht with-path $env.XS_SF_URL $path) | from json
}
# export def-env update-access-token [] {
# print -e $"Login as (ansi pb)($env.XS_SF_ACCOUNT)(ansi reset)"
# let token_response = (request-token)
# if "ErrorCode" in $token_response {
# print "ERROR"
# let error_msg = $"Could not login into smart cloud as user ($env.XS_SF_ACCOUNT): ($token_response | get Message)"
# error make {
# msg: $error_msg
# }
# }
# $token_response | credm update-token-response (token-name)
# $token_response.token
# }
export def provide-access-token [] {
let token = (credm get (token-name))
if not "password" in $token {
update-access-token
} else {
$token.password
}
}
export def list-subsystems [] {
sc-get "/1/rest/subsystems/management/" | get subsystemInfos
}
export def upload-sub [name:string@xs-subsystem-names, sub_path:string] {
^xh put --form -A bearer -a $"(provide-access-token)" (ht with-path $env.XS_SF_URL $"/1/rest/subsystems/management/($name)") 'subsystem-meta-data={ "description" : "Eine tolle Beschreibung" }' $"subsystem-data@($sub_path)"
| from json
}
export def xs-subsystem-names [] {
[
"XS-Service-Test",
"XS-Service-Prod",
]
}
def xs-matching-db-table-names [] {
[
"XS_SETTINGS"
]
}
export def start-transaction [
subsystem:string@xs-subsystem-names,
table:string@xs-matching-db-table-names,
columns:list
--clear
] {
{
subsystem: $subsystem,
tableMetaData: [{
tableName: $table,
clear: $clear,
columns: $columns
}]
} | to json
| sc-post /1/rest/subsystems/transactions/
}
export def tenant-settings [] {
let creds = (credm get $env.XS_SF_ACCOUNT)
{
"XS_BACKEND_URL": (ht with-path $env.XS_URL "/"),
"SF_URL": (ht with-path $env.XS_SF_URL "/"),
"TENANT_USER": $creds.login,
"TENANT_PASSWORD": $creds.password
}
}
export def commit-transaction [transaction_id:string] {
sc-delete $"/1/rest/subsystems/transactions/($transaction_id)/commit"
}
export def settings-db-row-count [name:string@xs-subsystem-names] {
sc-get $"/1/rest/subsystems/masterdata/count/($name)/XS_SETTINGS/Active"
}
export def update-tenant-settings [name:string@xs-subsystem-names] {
print -e $"Update settings for tenant ($env.XS_SF_ACCOUNT) and subsystem ($name)"
let transaction_id = (start-transaction $name XS_SETTINGS ["SETTINGS_KEY", "SETTINGS_VALUE"] --clear | get transactionId)
print -e $"transaction id: (ansi pb)($transaction_id)(ansi reset)"
tenant-settings | transpose | rename key value | each { |x| [$x.key,$x.value] } | to json
| sc-put $"/1/rest/subsystems/transactions/($transaction_id)/XS_SETTINGS"
commit-transaction $transaction_id
}