diff --git a/analysis/cleanup-worklog-2026-04-29.md b/analysis/cleanup-worklog-2026-04-29.md
index f55bd0f..9a7ce1c 100644
--- a/analysis/cleanup-worklog-2026-04-29.md
+++ b/analysis/cleanup-worklog-2026-04-29.md
@@ -135,6 +135,16 @@
Ожидаемый результат:
- единообразный русскоязычный комментарийный слой там, где комментарии реально остаются
+### Этап E. Дочистка явных хвостов
+
+Сделать:
+- удалить закомментированный `onRequest` и старые Taffy-заготовки из `v1/Application.cfc`
+- убрать остатки debug-комментариев и лишних пояснений из `v1/resources/instance_operation_run.cfc`
+- перепроверить, что логика не изменилась
+
+Ожидаемый результат:
+- source-файлы без явного мусора и без затронутого runtime
+
### Этап E. Сводный документ
Сделать:
@@ -152,6 +162,21 @@
- подготовить список вопросов по неоднозначным местам
- отдельно указать, какие решения были приняты по умолчанию без уточнения заказчика
+### Этап G. Дочистка remaining source-файлов
+
+Сделать:
+- убрать декоративные и старые комментарии из оставшихся прикладных `v1/*` файлов
+- отдельно дочистить `v1/Application.cfc` от закомментированного кода и явного мусора
+- проверить, что `git diff --check` остаётся чистым
+
+Ожидаемый результат:
+- текущий набор source-файлов без явных comment-hash остатков и без сломанной логики
+
+Результат:
+- большая часть remaining source-файлов очищена от декоративных комментариев
+- `v1/Application.cfc` очищен от закомментированного кода и старых debug-хвостов
+- `git diff --check` после правок остаётся чистым
+
## Принятые допущения на текущий момент
1. Работу нужно вести в отдельной ветке, а не в `dev`.
diff --git a/v1/Application.cfc b/v1/Application.cfc
index 4eddf08..00dc14a 100644
--- a/v1/Application.cfc
+++ b/v1/Application.cfc
@@ -68,7 +68,6 @@
-
@@ -148,50 +147,10 @@
-
-
-
- --->
-
-
-
function onTaffyRequest(verb, cfc, requestArguments, mimeExt, headers){
- /* https://docs.taffy.io/#/3.5.0 */
-/*
- //allow white-listed requests through
- if (cfc == "login"){
- return true;
- }
-
- //otherwise require a device token
- if (!structKeyExists(requestArguments, "deviceToken")){
- return newRepresentation().noData().withStatus(401, "Authentication Required");
-
- //and make sure it's valid
- }else if (!validateToken(requestArguments.deviceToken)){
-
- return newRepresentation().noData().withStatus(403, "Not Authorized");
- }
-
- //return representationOf(requestArguments);
- //if a token is included, and valid, allow the request to continue
- return true;
-*/
-////////////////////////////////////////////////
-// самым грубым образом получаем данные от IDP, не обрабатывая исключения
-
-
- //if (variables.framework.allowCrossDomain EQ "") {
- //corsHeaders(); // *** нужно, чтобы variables.framework.allowCrossDomain="" иначе задвоятся заголовки
- //}
-
- //if (UCase(arguments.verb) EQ 'OPTIONS') return newRepresentation().noData().withStatus("204","No Data").withHeaders({"Content-Type":"application/json;charset=utf-8"});
request.stand=this.getStand();
request.iam_service_url=this.iamServiceUrl;
@@ -210,49 +169,39 @@
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 = "Authorization", value = "#request.auth_header#"); //passthrough
- //writedump(authUrl);abort;
+ httpService.addParam(type = "HEADER", name = "Authorization", value = "#request.auth_header#");
var resp = httpService.send();
- //if (resp.status_code NEQ 200) throw("IDP response not OK");
- //writedump(resp);abort;
var prefix = resp.getPrefix();
if (prefix.status_code NEQ 200) {
- //writedump(authUrl);
- //writedump(resp);
var iamStatusCode = (isValid("integer", prefix.status_code)) ? val(prefix.status_code) : 500;
return representationOf( {"IAM URL"=#authUrl#, "idpResponse"=resp} ).withStatus(iamStatusCode);
- //abort;
- //throw("IDP response not OK");
}
result = prefix.filecontent;
- //writedump(result);abort;
} catch (e) {
return representationOf( {"exception"=e, "idpResponse"=result} ).withStatus(200);
}
- //writeDump(result); abort;
try {
var idpUserData=deserializeJson(result);
- "arguments.requestArguments.companyUid"=idpUserData.userInfo.companyId;//GUID!
- "arguments.requestArguments.usrUid"=idpUserData.userInfo.contactId;//userId; //GUID!
+ "arguments.requestArguments.companyUid"=idpUserData.userInfo.companyId;
+ "arguments.requestArguments.usrUid"=idpUserData.userInfo.contactId;
var usrCustomerInfo=getUsrCustomerInfo(idpUserData.userInfo.contactId, idpUserData.userInfo.companyId);
} catch (e) {
return representationOf( {"exception.Message"=e.Message, "exception.Detail"=e.Detail, "idpResponse"=result} ).withStatus(422);
}
- //dump(idpUserData);dump(usrCustomerInfo);abort;
if (lCase(arguments.cfc) EQ 'user') {
if (structIsEmpty(usrCustomerInfo)) return representationOf("User information not found").withStatus(404);
}
- if (lCase(arguments.cfc) EQ 'notification_ls') { //*** костыль: для нотификаций можно адресоваться к пользователю без контракта
+ if (lCase(arguments.cfc) EQ 'notification_ls') {
if (structIsEmpty(usrCustomerInfo)) {
- "arguments.requestArguments.usrId"=-1; //Integer!
- "arguments.requestArguments.contragentId"=-1; //Integer
- "arguments.requestArguments.contractId"=-1; //Integer
- "arguments.requestArguments.specificationId"=-1; //Integer
+ "arguments.requestArguments.usrId"=-1;
+ "arguments.requestArguments.contragentId"=-1;
+ "arguments.requestArguments.contractId"=-1;
+ "arguments.requestArguments.specificationId"=-1;
"arguments.requestArguments.isImpersonated"=false;
"arguments.requestArguments.clientID"="";
"arguments.requestArguments.login"="";
@@ -261,17 +210,17 @@
}
}
- if (structIsEmpty(usrCustomerInfo)) return representationOf("Cannot find default specification for current user #result#").withStatus(422); //это создает довольно много лишних движений при отладке
+ if (structIsEmpty(usrCustomerInfo)) return representationOf("Cannot find default specification for current user #result#").withStatus(422);
- "arguments.requestArguments.usrId"=usrCustomerInfo.usrId; //Integer
- "arguments.requestArguments.contragentId"=usrCustomerInfo.contragentId; //Integer
- "arguments.requestArguments.contractId"=usrCustomerInfo.contractId; //Integer
- "arguments.requestArguments.specificationId"=usrCustomerInfo.specificationId; //Integer
+ "arguments.requestArguments.usrId"=usrCustomerInfo.usrId;
+ "arguments.requestArguments.contragentId"=usrCustomerInfo.contragentId;
+ "arguments.requestArguments.contractId"=usrCustomerInfo.contractId;
+ "arguments.requestArguments.specificationId"=usrCustomerInfo.specificationId;
try {
"arguments.requestArguments.isImpersonated"=idpUserData.impersonation.is_impersonated;
} catch (e) {
- "arguments.requestArguments.isImpersonated"=false; // так себе решение, надо было бы NULL
+ "arguments.requestArguments.isImpersonated"=false;
}
try {
@@ -300,7 +249,6 @@
-
@@ -308,7 +256,6 @@
-
select usr_id from usr where login=
@@ -340,7 +287,6 @@
-
@@ -348,18 +294,13 @@
-
-
-
-
-
select z.contragent_id, c.contract_id, s.specification_id
@@ -372,7 +313,6 @@
-
select z.contragent_id
from contragent z
@@ -414,7 +354,6 @@
-
-
@@ -441,11 +379,9 @@
-
-
@@ -459,14 +395,9 @@
-
-
-
-
-
@@ -478,12 +409,10 @@
-
-
-
-
-
-
@@ -545,11 +466,9 @@
-
-
@@ -562,14 +481,11 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -666,11 +571,9 @@
-
-
@@ -679,17 +582,14 @@
-
-
-
-
-
-
@@ -730,7 +627,6 @@
-
@@ -740,13 +636,11 @@
-
-
-
-
-
-
@@ -797,7 +687,6 @@
-
@@ -833,7 +722,6 @@
-
#local.resultSerialized#
-
Request Details:
@@ -862,9 +749,4 @@
-
-
-
diff --git a/v1/lib/TokenGenerator.cfc b/v1/lib/TokenGenerator.cfc
index c3c883c..78faacb 100644
--- a/v1/lib/TokenGenerator.cfc
+++ b/v1/lib/TokenGenerator.cfc
@@ -1,120 +1,57 @@
-component /*https://www.bennadel.com/blog/2976-trying-to-generate-cryptographically-strong-random-tokens-in-coldfusion.htm*/
+component
output = false
hint = "Генерирует случайные токены с помощью Java SecureRandom."
{
- /**
- * Инициализирует генератор токенов.
- *
- * @output false
- */
public any function init() {
-
- // Реализация генератора, используемая для построения случайных токенов.
- // SHA1PRNG не является алгоритмом по умолчанию во всех реализациях JVM,
- // поэтому он задается явно для предсказуемого поведения.
generator = createObject( "java", "java.security.SecureRandom" )
.getInstance(
javaCast( "string", "SHA1PRNG" ),
javaCast( "string", "SUN" )
)
;
-
- // После инициализации нужно сгенерировать случайный байт,
- // чтобы генератор сам засеялся через общий источник seed.
- // Это может блокироваться до накопления достаточной энтропии,
- // поэтому операция выполняется при инициализации, а не при первом использовании.
generator.nextBytes( charsetDecode( " ", "utf-8" ) );
-
- // Момент следующего пересева генератора.
- // Это снижает риск слишком долгой работы с одним и тем же seed.
reseedAt = getNextReseedAt();
return( this );
-
}
-
- // Публичные методы.
-
-
- /**
- * Генерирует криптографически стойкий токен из заданного числа случайных байтов.
- * Байт-массив кодируется в форму, пригодную для использования в URL.
- *
- * @byteCount Количество случайных байтов для генерации токена.
- * @output false
- */
public string function nextToken( numeric byteCount = 32 ) {
-
- // Проверяем, нужен ли пересев генератора.
if ( now() >= reseedAt ) {
-
- // Пересев выполняется под lock, чтобы уменьшить гонки между потоками.
- // Если lock не получен вовремя, поток продолжает работу с текущим состоянием генератора.
lock
name = "TokenGenerator.reseedCheck"
type = "exclusive"
timeout = 1
throwOnTimeout = false
{
-
- // Повторная проверка внутри lock: другой поток мог уже обновить seed.
if ( now() >= reseedAt ) {
reseedAt = getNextReseedAt();
-
- // Новый seed добавляется к уже существующему внутреннему состоянию генератора.
generator.setSeed( generator.generateSeed( javaCast( "int", 32 ) ) );
-
}
-
}
-
}
- // Создаем буфер байтов, в который будут записаны случайные значения.
var byteBuffer = charsetDecode( repeatString( " ", byteCount ), "utf-8" );
generator.nextBytes( byteBuffer );
return( encodeBytes( byteBuffer ) );
-
}
-
- // Приватные методы.
-
-
- /**
- * Кодирует массив байтов в строку токена.
- *
- * @bytes Кодируемый массив байтов.
- * @output false
- */
private string function encodeBytes( required binary bytes ) {
- var token = binaryEncode( bytes, "base64" ); // *** вот поэтому длина отличается от заявленной
-
- // мы хотим убрать все спецсимволы, потому что мы используем токен в качестве псевдослучайного суффикса
+ var token = binaryEncode( bytes, "base64" );
token = replace( token, "+", "a", "all" );
token = replace( token, "/", "b", "all" );
token = replace( token, "=", "c", "all" );
return( token );
-
}
-
- /**
- * Вычисляет время следующего пересева генератора.
- *
- * @output false
- */
private date function getNextReseedAt() {
return( dateAdd( "h", 1, now() ) );
-
}
}
\ No newline at end of file
diff --git a/v1/resources/available_resource_realms.cfc b/v1/resources/available_resource_realms.cfc
index 91d6021..38c1fbd 100644
--- a/v1/resources/available_resource_realms.cfc
+++ b/v1/resources/available_resource_realms.cfc
@@ -5,7 +5,6 @@
-
-
-
-
+
diff --git a/v1/resources/bookmark.cfc b/v1/resources/bookmark.cfc
index beb2f04..c89aab8 100644
--- a/v1/resources/bookmark.cfc
+++ b/v1/resources/bookmark.cfc
@@ -55,8 +55,8 @@
-
-
+
+
diff --git a/v1/resources/bookmark_ls.cfc b/v1/resources/bookmark_ls.cfc
index 2b7e862..79709f7 100644
--- a/v1/resources/bookmark_ls.cfc
+++ b/v1/resources/bookmark_ls.cfc
@@ -5,7 +5,6 @@
-
-
-
@@ -31,12 +28,10 @@
-
-
@@ -68,7 +63,7 @@
from bookmark b
where 1=1
AND (b.contragent_id =
- OR b.contragent_id=-1)/*общая букмарка*/
+ OR b.contragent_id=-1)
order by b.contragent_id desc, b.sort asc
limit #maxrows#
@@ -108,10 +103,10 @@
-
+
-
-
+
+
diff --git a/v1/resources/catalog_service_param_ls.cfc b/v1/resources/catalog_service_param_ls.cfc
index 0a1c249..0370459 100644
--- a/v1/resources/catalog_service_param_ls.cfc
+++ b/v1/resources/catalog_service_param_ls.cfc
@@ -5,7 +5,6 @@
-
-
-
@@ -61,12 +58,10 @@
-
-
diff --git a/v1/resources/instance_operation_run.cfc b/v1/resources/instance_operation_run.cfc
index 226e318..ba835a6 100644
--- a/v1/resources/instance_operation_run.cfc
+++ b/v1/resources/instance_operation_run.cfc
@@ -53,7 +53,6 @@
).withStatus(404)/>
-
select io.dt_submit, io.dt_finish, io.dt_start, io.submit_result, io.status_url
from instance_operation io
@@ -87,10 +86,10 @@
-
+
-
-
+
+
@@ -163,12 +162,10 @@
join svc_operation_cfs_param socp on (iocp.svc_operation_cfs_param_id=socp.svc_operation_cfs_param_id)
join svc_operation_param sop on (socp.svc_operation_id=sop.svc_operation_id AND socp.svc_operation_cfs_param=sop.svc_operation_param)
where iocp.instance_operation_uid=
- /*PostgreSQL specific*/
ON CONFLICT (instance_operation_uid,param)
DO UPDATE SET param_value = EXCLUDED.param_value;
-
insert into instance_operation_param (instance_operation_uid,param,param_value)
select
@@ -176,8 +173,7 @@
,sop.svc_operation_param
,sop.default_value
from svc_operation_param sop
- where sop.svc_operation_id= AND length(sop.default_value)>0 /***null will be better*/
- /*PostgreSQL specific*/
+ where sop.svc_operation_id= AND length(sop.default_value)>0
ON CONFLICT (instance_operation_uid,param)
DO NOTHING;
@@ -220,7 +216,6 @@
-
update instance_operation
set dt_submit=
@@ -307,7 +302,6 @@
,
,
)
- /*PostgreSQL specific*/
ON CONFLICT (instance_operation_uid,param)
DO UPDATE SET param_value = EXCLUDED.param_value;
@@ -429,7 +423,6 @@
where io.instance_operation_uid=
-
select r.resource_realm_id, r.resource_realm, iop.param, iop.param_value, a.contract_id, a.is_enabled
from resource_realm r
diff --git a/v1/resources/notification_ls.cfc b/v1/resources/notification_ls.cfc
index fa4714d..5d7a1c8 100644
--- a/v1/resources/notification_ls.cfc
+++ b/v1/resources/notification_ls.cfc
@@ -5,7 +5,6 @@
-
-
-
-
@@ -28,12 +24,10 @@
-
-
diff --git a/v1/resources/resource_realm_ls.cfc b/v1/resources/resource_realm_ls.cfc
index 365ad13..1450806 100644
--- a/v1/resources/resource_realm_ls.cfc
+++ b/v1/resources/resource_realm_ls.cfc
@@ -5,7 +5,6 @@
-
-
-
@@ -69,7 +66,7 @@
OR a.contract_id=0)
AND a.is_enabled)
where 1=1
- order by
+ order by
limit #maxrows#
diff --git a/v1/resources/resource_realm_type_ls.cfc b/v1/resources/resource_realm_type_ls.cfc
index c704bdd..2dc484d 100644
--- a/v1/resources/resource_realm_type_ls.cfc
+++ b/v1/resources/resource_realm_type_ls.cfc
@@ -5,7 +5,6 @@
-
-
-
@@ -50,7 +47,7 @@
from resource_realm_type t
where 1=1
- order by
+ order by
limit #maxrows#
diff --git a/v1/resources/svc_operation_cfs_subparam_compute.cfc b/v1/resources/svc_operation_cfs_subparam_compute.cfc
index 58dc49a..01f6f99 100644
--- a/v1/resources/svc_operation_cfs_subparam_compute.cfc
+++ b/v1/resources/svc_operation_cfs_subparam_compute.cfc
@@ -1,23 +1,4 @@
-
-
-
@@ -26,17 +7,13 @@ arguments.requestArguments.specificationId=usrCustomerInfo.specificationId; //In
-
-
-
-
-
-
+
+
@@ -44,12 +21,12 @@ arguments.requestArguments.specificationId=usrCustomerInfo.specificationId; //In
-
+
-
+
select
@@ -69,15 +46,14 @@ arguments.requestArguments.specificationId=usrCustomerInfo.specificationId; //In
-
+
-
-
-
+