184 bugfix

This commit is contained in:
2025-11-29 20:21:15 +03:00
parent 510a7a8f74
commit c89467fbae
2 changed files with 44 additions and 16 deletions
+16 -10
View File
@@ -1,5 +1,10 @@
`<cfcomponent extends="taffy.core.api"> <cfcomponent extends="taffy.core.api">
<!---<cfset this.name = "deck_api" />---> <!---<cfset this.name = "deck_api" />--->
<!--- Способы передачи аргументов из Application.cfc
В скоупе request (доступен всегда и отовсюду). Но там может возникнуть хаос. Плюс: достаточно явный способ
onTaffyRequest.arguments.requestArguments - инжектируется в аргументы методов get/post/put etc/
this - в Taffy не работает, a только при include шаблона в Application.cfc (есть такой способ условного вызова шаблона) --->
<cfset this.mappings["/resources"] = expandPath("./resources")/> <cfset this.mappings["/resources"] = expandPath("./resources")/>
<cfset this.mappings["/taffy"] = expandPath("./taffy")/> <cfset this.mappings["/taffy"] = expandPath("./taffy")/>
<cfset this.mappings["/lib"] = expandPath("./lib")/> <cfset this.mappings["/lib"] = expandPath("./lib")/>
@@ -52,7 +57,7 @@
//variables.framework.docs={}; //variables.framework.docs={};
variables.framework.docs.APIName="svc-api"; variables.framework.docs.APIName="svc-api";
variables.framework.docs.APIVersion="0.183"; /*$ git config --global --unset user.password*/ variables.framework.docs.APIVersion="0.184"; /*$ git config --global --unset user.password*/
variables.framework.globalHeaders = structNew(); variables.framework.globalHeaders = structNew();
variables.framework.globalHeaders["Access-Control-Expose-Headers"] = "Location"; variables.framework.globalHeaders["Access-Control-Expose-Headers"] = "Location";
@@ -162,13 +167,13 @@
<cfswitch expression=#stand#> <cfswitch expression=#stand#>
<cfcase value=",dev"> <cfcase value=",dev">
<cfreturn "https://auth-api-dev.ngcloud.ru/api/v1/auth/user"/> <cfreturn "https://auth-api-dev.ngcloud.ru/api/v1" />
</cfcase> </cfcase>
<cfcase value="test"> <cfcase value="test">
<cfreturn "https://auth-api-test.ngcloud.ru/api/v1/auth/user"/> <cfreturn "https://auth-api-test.ngcloud.ru/api/v1" />
</cfcase> </cfcase>
<cfcase value="prod"> <cfcase value="prod">
<cfreturn "https://auth-api.ngcloud.ru/api/v1/auth/user"/> <cfreturn "https://auth-api.ngcloud.ru/api/v1" />
</cfcase> </cfcase>
<cfdefaultcase><!--- proceed to the legacy locator ---></cfdefaultcase> <cfdefaultcase><!--- proceed to the legacy locator ---></cfdefaultcase>
</cfswitch> </cfswitch>
@@ -179,7 +184,7 @@
</cftry> </cftry>
<!--- вот если ничего не прописано, попробуем по-старинке ---> <!--- вот если ничего не прописано, попробуем по-старинке --->
<cfloop list="https://auth-api-dev.ngcloud.ru/api/v1/auth/user,https://auth-api-test.ngcloud.ru/api/v1/auth/user,https://auth-api.ngcloud.ru/api/v1/auth/user" index="serviceUrl"><!--- *** начиная с девелоперского ---> <cfloop list="https://auth-api-dev.ngcloud.ru/api/v1,https://auth-api-test.ngcloud.ru/api/v1,https://auth-api.ngcloud.ru/api/v1" index="serviceUrl"><!--- *** начиная с девелоперского --->
<cftry> <cftry>
<cfhttp url=#serviceUrl# method="OPTIONS" result="resp" timeout=1/> <cfhttp url=#serviceUrl# method="OPTIONS" result="resp" timeout=1/>
@@ -251,19 +256,20 @@
} }
var result=""; var result="";
try { try {
var httpService = new http(method = "GET", charset = "utf-8", url = #this.iamServiceUrl#, timeout="5"); var authUrl = "#this.iamServiceUrl#/auth/user";
var httpService = new http(method = "GET", charset = "utf-8", url = #authUrl#, timeout="5");
httpService.addParam(type = "HEADER", name = "Accept", value = "application/json"); httpService.addParam(type = "HEADER", name = "Accept", value = "application/json");
httpService.addParam(type = "HEADER", name = "Authorization", value = "#request.auth_header#"); //passthrough httpService.addParam(type = "HEADER", name = "Authorization", value = "#request.auth_header#"); //passthrough
//writedump(this.iamServiceUrl);abort; //writedump(authUrl);abort;
var resp = httpService.send(); var resp = httpService.send();
//if (resp.status_code NEQ 200) throw("IDP response not OK"); //if (resp.status_code NEQ 200) throw("IDP response not OK");
//writedump(resp);abort; //writedump(resp);abort;
var prefix = resp.getPrefix(); var prefix = resp.getPrefix();
if (prefix.status_code NEQ 200) { if (prefix.status_code NEQ 200) {
//writedump(this.iamServiceUrl); //writedump(authUrl);
//writedump(resp); //writedump(resp);
var iamStatusCode = (isValid("integer", prefix.status_code)) ? val(prefix.status_code) : 500; var iamStatusCode = (isValid("integer", prefix.status_code)) ? val(prefix.status_code) : 500;
return representationOf( {"iamServiceUrl"=this.iamServiceUrl, "idpResponse"=resp} ).withStatus(iamStatusCode); return representationOf( {"IAM URL"=#authUrl#, "idpResponse"=resp} ).withStatus(iamStatusCode);
//abort; //abort;
//throw("IDP response not OK"); //throw("IDP response not OK");
} }
+28 -6
View File
@@ -21,6 +21,19 @@
<cfset var local={}/> <cfset var local={}/>
<cfset local.vaultData={}/> <cfset local.vaultData={}/>
<!--- <cfset logVaultAccess(
"#request.iam_service_url#/events",
request.auth_header,
request.stand,
arguments.instanceUid,
arguments.secretName,
"",
arguments.login,
arguments.clientID,
arguments.usrId,
arguments.contragentId,
arguments.isImpersonated)/> --->
<!--- *** Добавить проверку, что секрет перечислен в fields - стало быть, доступен пользователю ---> <!--- *** Добавить проверку, что секрет перечислен в fields - стало быть, доступен пользователю --->
<!--- тут необходимо проконтролировать, что мы смотрим не чужие данные ---> <!--- тут необходимо проконтролировать, что мы смотрим не чужие данные --->
@@ -57,13 +70,17 @@
<!--- <cfdump var=#local.qCurrentState#/><cfabort/> ---> <!--- <cfdump var=#local.qCurrentState#/><cfabort/> --->
<cfset var vaultUrl=""/> <cfset var vaultUrl=""/>
<cftry> <cftry>
<cfset var instanceData=#deserializeJson(local.qCurrentState.instance_data)#/> <cfset var instanceData=#deserializeJson(local.qCurrentState.instance_data)#/>
<cfif structKeyExists(instanceData,"vaultUrl")> <cfif structKeyExists(instanceData,"vaultUrl")>
<cfset vaultUrl=instanceData.vaultUrl/> <!--- v001 ---> <cfset vaultUrl=instanceData.vaultUrl/> <!--- v001 --->
<cfelseif structKeyExists(instanceData,"vault")> <cfelseif structKeyExists(instanceData,"vault")>
<cfif !structKeyExists(instanceData.vault,"Url")>
<cfreturn representationOf("instanceData.vault does not contain url").withStatus(422)/>
</cfif>
<cfset vaultUrl=instanceData.vault.Url/><!--- v002 ---> <cfset vaultUrl=instanceData.vault.Url/><!--- v002 --->
<cfelse>
<cfreturn representationOf("Instance data do not contain vault url").withStatus(422)/>
</cfif> </cfif>
<cfhttp method="post" <cfhttp method="post"
@@ -122,7 +139,7 @@
<!--- логируем успешную попытку доступа. (если логировать сначала - неизвестен результат. *** Можно в catch логировать неуспешный ---> <!--- логируем успешную попытку доступа. (если логировать сначала - неизвестен результат. *** Можно в catch логировать неуспешный --->
<cfset logVaultAccess( <cfset logVaultAccess(
request.iam_service_url, "#request.iam_service_url#/events",
request.auth_header, request.auth_header,
request.stand, request.stand,
arguments.instanceUid, arguments.instanceUid,
@@ -143,7 +160,7 @@
</cffunction> </cffunction>
<cffunction name="logVaultAccess" returntype="void"> <cffunction name="logVaultAccess" returntype="void">
<cfargument name="iamUrl" type="string" required=true hint=""/> <cfargument name="loggerUrl" type="string" required=true hint=""/>
<cfargument name="authHeader" type="string" required=true hint="type:string"/> <cfargument name="authHeader" type="string" required=true hint="type:string"/>
<cfargument name="stand" type="string" required=true hint="type:string"/> <cfargument name="stand" type="string" required=true hint="type:string"/>
<cfargument name="instanceUid" type="string" required=true hint="type:UUID"/> <cfargument name="instanceUid" type="string" required=true hint="type:UUID"/>
@@ -194,7 +211,7 @@
<!--- <cfdump var=#msg#/><cfabort/> ---> <!--- <cfdump var=#msg#/><cfabort/> --->
<cfhttp method="post" <cfhttp method="post"
url="#arguments.iamUrl#" url="#arguments.loggerUrl#"
timeout="3" timeout="3"
charset="utf-8" charset="utf-8"
result="local.res" result="local.res"
@@ -204,7 +221,12 @@
<cfhttpparam type="BODY" value="#serializeJson(msg)#"/> <cfhttpparam type="BODY" value="#serializeJson(msg)#"/>
</cfhttp> </cfhttp>
<!--- <cfdump var=#local.res#/><cfabort/> ---> <!---
arguments:<cfdump var=#arguments#/>
msg:<cfdump var=#msg#/>
local.res:<cfdump var=#local.res#/>
<cfabort/>
--->
<cfcatch type="any"> <cfcatch type="any">
<cfrethrow/><!--- на этапе отладки лучше тут падать ---> <cfrethrow/><!--- на этапе отладки лучше тут падать --->
</cfcatch> </cfcatch>