184 bugfix
This commit is contained in:
+16
-10
@@ -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");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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 - стало быть, доступен пользователю --->
|
||||||
|
|
||||||
<!--- тут необходимо проконтролировать, что мы смотрим не чужие данные --->
|
<!--- тут необходимо проконтролировать, что мы смотрим не чужие данные --->
|
||||||
@@ -58,12 +71,16 @@
|
|||||||
<!--- <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>
|
||||||
|
|||||||
Reference in New Issue
Block a user