This commit is contained in:
msyu
2024-10-30 13:46:08 +03:00
parent 75319aa3cd
commit df6576a505
10 changed files with 116 additions and 23 deletions
View File
View File
View File
View File
View File
+34 -16
View File
@@ -69,29 +69,29 @@
variables.framework.allowCrossDomain = true; // соответствующие заголовки, включая Access-Control-Allow-Origin выставляются только при наличии заголовка origin в реквесте
//variables.framework.allowCrossDomain = ""; // перепишем явно, возвращая Origin
//variables.framework.docs={};
variables.framework.docs.APIName="Deck API";
variables.framework.docs.APIVersion="0.005";
variables.framework.globalHeaders = structNew();
variables.framework.globalHeaders["Access-Control-Expose-Headers"] = "Location";
variables.framework.globalHeaders["Access-Control-Allow-Credentials"] = "true";
variables.framework.globalHeaders["X-Application-Version"] = "0.00.004";
//variables.framework.globalHeaders["Access-Control-Allow-Origin"] = "*"; //*** не знаю, нужно ли - но просили этот заголовок
//variables.framework.globalHeaders["X-MY-HEADER"] = "my header value for example";
//variables.framework.docs={};
variables.framework.docs.APIName="Deck API";
variables.framework.docs.APIVersion="0.004";
variables.framework.globalHeaders["X-Application-Version"] = variables.framework.docs.APIVersion;
//variables.framework.globalHeaders["Access-Control-Allow-Origin"] = "*";
request.UNDEFINED_USR_ID=-1;
request.ANONYMOUS_USR_ID=2;
request.GUEST_USR_ID=3;
request.GUEST_USR_ID=3
////////////////////////////////////////////////////////
request.ORCHESTRATOR_AUTH = createObject("java", "java.lang.System").getEnv("ORCHESTRATOR_AUTH");
if (isNull(request.ORCHESTRATOR_AUTH)) {
request.ORCHESTRATOR_AUTH = "Basic c3ZjX2xrdGVzdDoxMTgzZDIyNzc1OWExYjFkZmVjM2M3NTFiMzIyNzdiYTQ3";//*** времянка, дубль из корневого Application.cfm
}
//почему-то scope this ведет себя совершенно не так, как request и variables
// в нем переменная имеет значение Empty:null и можно выполнить writedump, а в других получаем ошибку, что такой переменной нет
//*** почему-то scope this ведет себя совершенно не так, как request и variables
// в нем, когда переменная получает значение Empty:null, можно выполнить writedump, а в других получаем ошибку, что такой переменной нет
request.locateIamService=locateIamService; //for possible debug
//request.IAM_SERVICE_URL=this.iamServiceUrl;
</cfscript>
<!--- <cfset this.orchestrator_authorization_string=createObject("java", "java.lang.System").getEnv("ORCHESTRATOR_AUTH")/>
@@ -104,8 +104,24 @@
<!--- <cfset application.dbUser = "username" />
<cfset application.dbPass = "password" />--->
<!---<cfset application._taffy.settings.allowCrossDomain = true/>--->
<cfset this.iamServiceUrl=locateIamService()/> <!--- ***при недоступности будет падать все --->
<cfreturn super.onApplicationStart() />
</cffunction>
</cffunction>
<cffunction name="locateIamService"><!--- *** архитектурный колхоз --->
<cfloop list="https://personal-cabinet.adl.nubes.ru/api/v1/user,https://deck.ngcloud.ru/api/v1/user" index="serviceUrl"><!--- *** начиная с девелоперского --->
<cftry>
<cfhttp url=#serviceUrl# method="OPTIONS" result="resp" timeout=1/>
<!--- <cfdump var=#resp#/> --->
<cfreturn serviceUrl/>
<cfcatch type="any">
<!--- <cfdump var=#cfcatch#/> --->
</cfcatch>
</cftry>
</cfloop>
<cfthrow message="IAM service unavailable" detail="cannot find IAM"/>
</cffunction>
<!--- <cffunction name="onRequest">
<cfargument name="template" type="string" required="true"/>
@@ -149,7 +165,7 @@
//if (UCase(arguments.verb) EQ 'OPTIONS') return newRepresentation().noData().withStatus("204","No Data").withHeaders({"Content-Type":"application/json;charset=utf-8"});
if (UCase(arguments.verb) EQ 'OPTIONS') return true;
/*
var auth="";
if (structKeyExists(headers,"Authorization")) {
auth=headers.Authorization;
@@ -157,7 +173,7 @@
return representationOf("Authorization header expected").withStatus(401);
}
var httpService = new http(method = "GET", charset = "utf-8", url = "https://personal-cabinet.adl.nubes.ru/api/v1/user", timeout="3");
var httpService = new http(method = "GET", charset = "utf-8", url = #this.iamServiceUrl#, timeout="3");
httpService.addParam(type = "HEADER", name = "Accept", value = "application/json");
httpService.addParam(type = "HEADER", name = "Authorization", value = "#auth#"); //passthrough
var resp = httpService.send();
@@ -171,7 +187,7 @@
if (structIsEmpty(usrCustomerInfo)) return representationOf("Cannot find default specification for current user #result#").withStatus(422);
arguments.requestArguments.usrId=usrCustomerInfo.usrId; //Integer!
arguments.requestArguments.specificationId=usrCustomerInfo.specificationId; //Integer
*/
return true;
@@ -749,4 +765,6 @@
<cfreturn true />
</cffunction>
</cfcomponent>
+2 -2
View File
@@ -6,7 +6,7 @@
</cfsilent>
<cffunction name="get" hint="попробуем авторизоваться у элмы">
<cffunction name="get" hint="генерирует ошибку 500">
<!--- <cfargument name="svcOperationId" required=true hint="int"/> --->
<!--- <cftry>
<cfset this.helper.validateField(arguments, "svcOperationId", "integer")/>
@@ -20,7 +20,7 @@
<!--- <cfdump var=#userdata#/><cfabort/> --->
<cfreturn representationOf(fcontent) />
<cfreturn representationOf("Some error").withStatus(500) />
</cffunction>
</cfcomponent>
+4 -5
View File
@@ -39,7 +39,7 @@
</cfcatch>
</cftry>
<!--- <cftry> --->
<cftry><!--- *** времянка, пока глотается ошибка 500 --->
<cfset var maxrows=arguments.pageSize*arguments.page/>
<cfset var startrow=arguments.pageSize*(arguments.page-1)+1/>
@@ -121,11 +121,10 @@
<!---<cfset "out.sql"=#local.result.sql#/>--->
<cfreturn representationOf(out)/>
<!--- <cfcatch type="any">
<cfcatch type="any">
<cfreturn representationOf(cfcatch)/>
</cfcatch>
</cftry> --->
</cfcatch>
</cftry>
</cffunction>
+2
View File
@@ -110,6 +110,8 @@
<cfset var maxrows=arguments.pageSize*arguments.page/>
<cfset var startrow=arguments.pageSize*(arguments.page-1)+1/>
<cfset request.locateIamService()/>
<cfquery name="local.qRead" result="local.result">
select
+74
View File
@@ -0,0 +1,74 @@
<cfcomponent extends="taffy.core.resource" taffy:uri="/user">
<cfsilent>
<cfimport prefix="m" taglib="../lib"/>
<cfset this.helper=CreateObject("component","lib.rest_api_helper")/><!---*** странно, почему мы его видим?---><!---вынести в апп?--->
</cfsilent>
<cffunction name="get" hint="Контрольная информация по текущему пользователю для проверки контекста. Предполагается использовать только для интеграционной отладки. Исключения перехватываются, всегда возвращается код 200, структура ответа при этом не предназначена для разбора">
<cftry>
<cfset var local={}/><!--- *** а точно нужно var? --->
<cfset var out=structNew("linked")/>
<cfset "out.usrId"=#ARGUMENTS.usrId#/>
<cfset "out.iamServiceUrl"=request.locateIamService()/>
<cfset "out.serviceLocationDurationMs"=getTickCount() - request.startTickCount/>
<cfquery name=local.qSpec>
select
<m:field_set titleMapOut="local.specTitleMap" lengthOut="local.fieldCount">
<m:field cfSqlType="CF_SQL_INTEGER">s.specification_id</m:field>
<m:field>s.specification</m:field>
<m:field>(select count(*) from specification_item i where i.specification_id=s.specification_id) as specification_item_count</m:field>
<m:field>c.contract_id</m:field>
<m:field>c.contract</m:field>
<m:field>to_char(c.dt_contract, 'YYYY-MM-DD"T"HH24:MI:SS.FF3TZHTZM') as dt_contract</m:field>
</m:field_set>
from specification s
join contract c on (s.contract_id=c.contract_id)
join usr u on (c.contragent_id=u.contragent_id)
where u.usr_id=<cfqueryparam cfsqltype="cf_sql_integer" value=#ARGUMENTS.usrId#/><!--- *** undeclared --->
order by specification_id desc limit 1;
</cfquery>
<cfquery name="local.qRead" result="local.result">
select
<m:field_set titleMapOut="local.titleMap" lengthOut="local.fieldCount">
<m:field cfSqlType="CF_SQL_INTEGER">u.usr_id</m:field>
<m:field>u.login</m:field>
<m:field>k.contragent_id</m:field>
<m:field>k.contragent</m:field>
</m:field_set>
from usr u
left outer join contragent k on u.contragent_id=k.contragent_id
where u.usr_id=<cfqueryparam cfsqltype="cf_sql_integer" value=#ARGUMENTS.usrId#/>
</cfquery>
<cfset "out.queryDurationMs"=getTickCount() - request.startTickCount- out.serviceLocationDurationMs/>
<cfset var resultSet=[]/>
<cfset "out.usr" = (local.qRead.recordCount GT 0) ? this.helper.appendRecord(structNew("linked"), "", local.titleMap, local.qRead, this.helper.snake2camel) : {}/>
<cfset "out.defaultSpecification" = (local.qSpec.recordCount GT 0) ? this.helper.appendRecord(structNew("linked"), "", local.specTitleMap, local.qSpec, this.helper.snake2camel) : {}/>
<cfset "out.runDurationMs"=getTickCount()-request.startTickCount/>
<!---<cfset "out.sql"=#local.result.sql#/>--->
<cfreturn representationOf(out)/>
<cfcatch type="any">
<cfreturn representationOf(cfcatch)/>
</cfcatch>
</cftry>
</cffunction>
<!--- <cffunction name="get" hint="проверка">
<cfreturn representationOf("Проверка связи")/>
</cffunction> --->
</cfcomponent>