# Исходники svc-api-x
Дата сборки: 2026-05-19
Прикладной слой после cleanup: v1/ без taffy и без backup-каталогов.
## v1/Application.cfc
```cfml
this.name = hash(getCurrentTemplatePath());
variables.framework.debugKey = "debug";
variables.framework.reloadKey = "reload";
variables.framework.reloadPassword = "true";
variables.framework.reloadOnEveryRequest = true;
variables.framework.serializer = "taffy.core.nativeJsonSerializer";
variables.framework.dashboardKey = "dashboard";
variables.framework.disableDashboard = false;
variables.framework.unhandledPaths = "/flex2gateway";
variables.framework.allowCrossDomain = true;
variables.framework.docs.APIName="svc-api";
variables.framework.docs.APIVersion="0.234";
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"] = variables.framework.docs.APIVersion;
request.UNDEFINED_USR_ID=-1;
request.ANONYMOUS_USR_ID=2;
request.GUEST_USR_ID=3;
request.USER_AGENT="#variables.framework.docs.APIName# #variables.framework.docs.APIVersion# stand:#this.getStand()#";
request.ORCHESTRATOR_AUTH = createObject("java", "java.lang.System").getEnv("ORCHESTRATOR_AUTH");
if (isNull(request.ORCHESTRATOR_AUTH)) {
request.ORCHESTRATOR_AUTH = "Basic ...no data";
}
request.vault_login_url="https://vault.lk.adl.nubes.ru/v1/auth/approle/login";
request.vault_role_id=createObject("java", "java.lang.System").getEnv("VAULT_ROLE_ID");
request.vault_secret_id=createObject("java", "java.lang.System").getEnv("VAULT_SECRET_ID");
request.auth_header="";
select value as stand from config
where name='STAND'
select value as stand from config
where name='STAND'
function onTaffyRequest(verb, cfc, requestArguments, mimeExt, headers){
request.stand=this.getStand();
request.iam_service_url=this.iamServiceUrl;
if (uCase(arguments.verb) EQ 'OPTIONS') return true;
if (lCase(arguments.cfc) EQ 'err') return true;
if (lCase(arguments.cfc) EQ 'throw') return true;
if (structKeyExists(headers,"Authorization")) {
request.auth_header=headers.Authorization;
} else {
return representationOf("Authorization header expected").withStatus(401);
}
var result="";
try {
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#");
var resp = httpService.send();
var prefix = resp.getPrefix();
if (prefix.status_code NEQ 200) {
var iamStatusCode = (isValid("integer", prefix.status_code)) ? val(prefix.status_code) : 500;
return representationOf( {"IAM URL"=#authUrl#, "idpResponse"=resp} ).withStatus(iamStatusCode);
}
result = prefix.filecontent;
} catch (e) {
return representationOf( {"exception"=e, "idpResponse"=result} ).withStatus(200);
}
try {
var idpUserData=deserializeJson(result);
"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);
}
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 (structIsEmpty(usrCustomerInfo)) {
"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"="";
return true;
}
}
if (structIsEmpty(usrCustomerInfo)) return representationOf("Cannot find default specification for current user #result#").withStatus(422);
"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;
}
try {
"arguments.requestArguments.clientID"=idpUserData.userInfo.clientID;
} catch (e) {
"arguments.requestArguments.clientID"="";
}
try {
"arguments.requestArguments.login"=idpUserData.userInfo.login;
} catch (e) {
"arguments.requestArguments.login"="";
}
return true;
}
select usr_id from usr where login=
#cfcatch.message# : #cfcatch.detail#
#cfcatch.message# : #cfcatch.detail#
при этом если имперсонируется компания, то спецификацию и контракт нужно брать по компании
Кстати, зачем нужен вообще юзер, если компания всегда доступна, а вся информация висит на ней
Для того, чтобы разрешить ключ в целочисленный ключ CMDB--->
select z.contragent_id, c.contract_id, s.specification_id
from contragent z
join contract c on (z.contragent_id=c.contragent_id)
join specification s on (c.contract_id=s.contract_id)
where z.external_uid=
order by s.specification_id desc
limit 1;
select z.contragent_id
from contragent z
where z.external_uid=
select z.contragent_id, c.contract_id
from contragent z
join contract c on (z.contragent_id=c.contragent_id)
where z.external_uid=
select u.usr_id, u.contragent_id, k.contragent_id as c_contragent_id
from usr u
left outer join contragent k on (u.contragent_id=k.contragent_id)
where u.idp_usr_uid=
limit 1;
Now we know everything we need to know to service the request. let's service it!
--->
This way we can directly return the object instead of a serializer from resource actions. --->
#local.resultSerialized#
Request Details:
```
## v1/index.cfm
```cfml
this file index.cfm is a placeholder for Tomcat, it's content doesn't matter
```
## v1/lib/JsonSerializer.cfc
```cfml
component
output = false
hint = "I provide a way to serialize complex ColdFusion data values as case-sensitive JavaScript Object Notation (JSON) strings."
{
//2024-06-27 modified by msyu: added server timezone
// I return the initialized component.
public any function init() {
// Every key is added to the full key list - used for one-time key serialization.
fullKeyList = {};
// Every key is added to the hint list so that we don't have to switch on the lists.
fullHintList = {};
// These key lists determine special data serialization.
stringKeyList = {};
booleanKeyList = {};
integerKeyList = {};
floatKeyList = {};
dateKeyList = {};
// These keys will NOT be used in serialization (ie. the key/value pairs will not be
// added to the serialized output).
blockedKeyList = {};
// Return the initialized component.
return( this );
}
// ---
// PUBLIC METHODS.
// ---
// I define the given key without a type. This is here to provide key-casing without caring
// about why type of data conversion takes place. Returns serializer.
public any function asAny( required string key ) {
return( defineKey( fullKeyList, key, "any" ) );
}
// I define the given key as a boolean. Returns serializer.
public any function asBoolean( required string key ) {
return( defineKey( booleanKeyList, key, "boolean" ) );
}
// I define the given key as a date. Returns serializer.
public any function asDate( required string key ) {
return( defineKey( dateKeyList, key, "date" ) );
}
// I define the given key as a float / decimal. Returns serializer.
public any function asFloat( required string key ) {
return( defineKey( floatKeyList, key, "float" ) );
}
// I define the given key as an integer. Returns serializer.
public any function asInteger( required string key ) {
return( defineKey( integerKeyList, key, "integer" ) );
}
// I define the given key as a string. Returns serializer.
public any function asString( required string key ) {
return( defineKey( stringKeyList, key, "string" ) );
}
// I define the key as one that should not be included in the serialized response.
public any function exclude( required string key ) {
blockedKeyList[ key ] = true;
return( this );
}
/**
* I serialize the given input as JavaScript Object Notation (JSON) using the case-sensitive
* values defined in the key-list.
*
* @output false
*/
public string function serialize( required any input ) {
// Write the serialized value to the output buffer.
savecontent variable = "local.serializedInput" {
serializeInput( input, "any" );
}
return( serializedInput );
}
// ---
// PRIVATE METHODS.
// ---
// I define the given key within the given key list.
private any function defineKey(
required struct keyList,
required string key,
required string hint
) {
if ( structKeyExists( fullKeyList, key ) ) {
throw(
type = "DuplicateKey",
message = "The key [#key#] has already been defined within the serializer.",
detail = "The current key list is: #structKeyList( fullKeyList, ', ' )#"
);
}
// Add to the appropriate data-type lists. This one is used for existence checking.
keyList[ key ] = key;
// Add all keys to the full key list as well. This one is used to store the serialization
// of the key so that it doesn't have to be recalculated each time the object is serialized.
fullKeyList[ key ] = serializeString( key );
// If we have a specific type, then add the hint to the full hint list as well. This will
// allow us to quickly look up the pass-through data type hint during serialization.
// --
// NOTE: The reason we don't want to pass through "any" is that we want parent types to be
// able to "fall through" during the object traversal. If we added "any" to the type list,
// then it would always overwrite the parent data type.
if ( hint != "any" ) {
fullHintList[ key ] = hint;
}
// Return this reference for method chaining.
return( this );
}
// I walk the given object, writing the serialized value to the output (which is expected to
// be a content buffer).
// ---
// NOTE: THIS METHOD IS HUGE - this is on purpose. Since serialization is a rather intense
// process, I am trying to cut out as much overhead as possible. In this case, we're cutting
// out extra stack space by inlining and duplicating a lot of functionality. This is being done
// at the COST of clarity and non-repetitive code.
private void function serializeInput(
required any input,
required string hint
) {
// Serialize the data base on the type of input. We are organizing this in terms of the
// most commonly-used values first. The anticipation is that the vast majority of data
// types will be simple values.
if ( isSimpleValue( input ) ) {
if ( ( hint == "string" ) || ( hint == "any" ) ) {
// If the string appears to be numeric, then we have to prefix it to make sure
// ColdFusion doesn't accidentally convert it to a number.
if ( isNumeric( input ) ) {
writeOutput( """" & input & """" );
} else {
serializeInputString( input );
}
} else if ( ( hint == "boolean" ) && isBoolean( input ) ) {
writeOutput( input ? "true" : "false" );
} else if ( ( ( hint == "integer" ) || ( hint == "float" ) ) && isNumeric( input ) ) {
writeOutput( input );
} else if ( ( ( hint == "integer" ) || ( hint == "float" ) ) && isBoolean( input ) ) {
writeOutput( input ? "1" : "0" );
} else if ( ( hint == "date" ) && ( isDate( input ) || isNumericDate( input ) ) ) {
// Write the date in ISO 8601 time string format. We're going to assume that the
// date is already in the desired timezone.
///writeOutput( """" & dateFormat( input, "yyyy-mm-dd" ) & "T" & timeFormat( input, "HH:mm:ss.l" ) & "Z""" );
//2024-06-27 modified by msyu: added server timezone
writeOutput( """" & dateFormat( input, "yyyy-mm-dd" ) & "T" & timeFormat( input, "HH:mm:ss.lXX" ) & """" );
} else {
serializeInputString( input );
}
return;
} // END: isSimpleValue().
// I'm expecting the struct to be the next most common data type since it will likely be
// the container for the majority of data values.
if ( isStruct( input ) ) {
writeOutput( "{" );
var isFirst = true;
for ( var key in input ) {
// Skip any black-listed keys.
if ( structKeyExists( blockedKeyList, key ) ) {
continue;
}
// Handle the item delimiter.
if ( isFirst ) {
isFirst = false;
} else {
writeOutput( "," );
}
// Ensure that the given key can be referenced on the full-key list. This way,
// the subsequent logic will be easier.
if ( ! structKeyExists( fullKeyList, key ) ) {
asAny( lcase( key ) );
}
writeOutput( fullKeyList[ key ] & ":" );
// Pass in the most appropriate data-type hint based on the parent key.
if ( structKeyExists( fullHintList, key ) ) {
serializeInput( input[ key ], fullHintList[ key ] );
// If the given key is unknown, just pass through the most recent hint as
// it may be defining the type for an entire structure.
} else {
serializeInput( input[ key ], hint );
}
}
writeOutput( "}" );
return;
} // END: isStruct().
if ( isArray( input ) ) {
writeOutput( "[" );
var isFirst = true;
// Handle the item delimiter.
for ( var value in input ) {
if ( isFirst ) {
isFirst = false;
} else {
writeOutput( "," );
}
// Since we don't have a key to go off of, pass-through the most recent hint.
serializeInput( value, hint );
}
writeOutput( "]" );
return;
} // END: isArray().
// When we serialize a query, we're going to treat it like an array of structs.
if ( isQuery( input ) ) {
var keys = listToArray( input.columnList );
// Make sure each column is defined as a known key - makes the subsequent logic easier.
for ( var key in keys ) {
if ( ! structKeyExists( fullKeyList, key ) ) {
asAny( lcase( key ) );
}
}
writeOutput( "[" );
// Serialize each row of the query as a struct.
for ( var i = 1 ; i <= input.recordCount ; i++ ) {
// Handle the row delimiter.
if ( i > 1 ) {
writeOutput( "," );
}
writeOutput( "{" );
var isFirst = true;
for ( var key in keys ) {
// Skip any black-listed keys.
if ( structKeyExists( blockedKeyList, key ) ) {
continue;
}
// Handle the item delimiter (in the current row).
if ( isFirst ) {
isFirst = false;
} else {
writeOutput( "," );
}
writeOutput( fullKeyList[ key ] & ":" );
// Pass in the most appropriate data-type hint based on the parent key.
if ( structKeyExists( fullHintList, key ) ) {
serializeInput( input[ key ][ i ], fullHintList[ key ] );
// If the given key is unknown, just pass through the most recent hint as
// it may be defining the type for an entire structure.
} else {
serializeInput( input[ key ][ i ], hint );
}
} // END: Key list.
writeOutput( "}" );
} // END: Row list.
writeOutput( "]" );
return;
} // END: isQuery().
// If we made it this far, we were given a data type that we're not actively supporting.
// As such, we just have to hand this off to the native serializer.
writeOutput( serializeJson( input ) );
}
/**
* I serialize and write the given string to the current output context, escaping all appropriate
* characters for the JSON specification.
*
* NOTE: We are using this manual-encoding process rather than the built-in serializeJson() function
* as there is a rather nasty bug that corrupts certain patterns in the output. Read more:
*
* http://www.bennadel.com/blog/2842-serializejson-and-the-input-and-output-encodings-are-not-same-errors-in-coldfusion.htm
*
* @input I am the string being serialized.
*/
private void function serializeInputString( required string input ) {
// While this may not be technically needed, this will ensure that we are not using any
// "undocumented features" of the language. If we explicitly cast to a Java string, and
// something goes wrong due to odd type-casting, it's a ColdFusion bug, at that point, not
// a logic error ;)
input = javaCast( "string", input );
var length = input.length();
writeOutput( """" );
for ( var i = 1 ; i <= length ; i++ ) {
var charCode = input.codePointAt( javaCast( "int", i - 1 ) );
// Check for the most common case first (normal characters).
if (
( charCode >= 32 ) &&
( charCode != 34 ) &&
( charCode != 47 ) &&
( charCode != 92 ) &&
( charCode != 8232 ) &&
( charCode != 8233 )
) {
writeOutput( chr( charCode ) );
// Check for the special cases next (control characters, characters that
// need to be escaped, and characters that need to be encoded nicely).
} else if ( charCode == 8 ) {
writeOutput( "\b" );
} else if ( charCode == 9 ) {
writeOutput( "\t" );
} else if ( charCode == 10 ) {
writeOutput( "\n" );
} else if ( charCode == 12 ) {
writeOutput( "\f" );
} else if ( charCode == 13 ) {
writeOutput( "\r" );
} else if (
( charCode < 32 ) ||
( charCode == 8232 ) ||
( charCode == 8233 )
) {
// For Unicode hex values, we need to enforce a 4-digit code.
writeOutput( "\u" & right( ( "000" & formatBaseN( charCode, 16 ) ), 4 ) );
} else if ( charCode == 34 ) {
writeOutput( "\""" );
} else if ( charCode == 47 ) {
writeOutput( "\/" );
} else if ( charCode == 92 ) {
writeOutput( "\\" );
}
}
writeOutput( """" );
}
/**
* I serialize and return the given string, escaping all appropriate characters for the
* JSON specification.
*
* @input I am the string being serialized.
* @output false
*/
private string function serializeString( required string input ) {
savecontent variable = "local.json" {
serializeInputString( input );
}
return( json );
}
}
```
## v1/lib/TokenGenerator.cfc
```cfml
component
output = false
hint = "Генерирует случайные токены с помощью Java SecureRandom."
{
public any function init() {
generator = createObject( "java", "java.security.SecureRandom" )
.getInstance(
javaCast( "string", "SHA1PRNG" ),
javaCast( "string", "SUN" )
)
;
generator.nextBytes( charsetDecode( " ", "utf-8" ) );
reseedAt = getNextReseedAt();
return( this );
}
public string function nextToken( numeric byteCount = 32 ) {
if ( now() >= reseedAt ) {
lock
name = "TokenGenerator.reseedCheck"
type = "exclusive"
timeout = 1
throwOnTimeout = false
{
if ( now() >= reseedAt ) {
reseedAt = getNextReseedAt();
generator.setSeed( generator.generateSeed( javaCast( "int", 32 ) ) );
}
}
}
var byteBuffer = charsetDecode( repeatString( " ", byteCount ), "utf-8" );
generator.nextBytes( byteBuffer );
return( encodeBytes( byteBuffer ) );
}
private string function encodeBytes( required binary bytes ) {
var token = binaryEncode( bytes, "base64" );
token = replace( token, "+", "a", "all" );
token = replace( token, "/", "b", "all" );
token = replace( token, "=", "c", "all" );
return( token );
}
private date function getNextReseedAt() {
return( dateAdd( "h", 1, now() ) );
}
}
```
## v1/lib/encodingUtils.cfc
```cfml
component {
public any function init() {
variables.utcBaseDate = createObject( 'java', 'java.util.Date' ).init( javacast( 'int', 0 ) );
variables.ECParameterSpecCache = { };
}
function convertDateToUnixTimestamp( required date dateToConvert ) {
return dateDiff( 's', utcBaseDate, parseDateTime( dateToConvert ) );
}
function convertUnixTimestampToDate( required numeric timestamp ) {
return dateAdd( 's', timestamp, utcBaseDate );
}
function base64UrlToBinary( base64url ) {
var base64 = base64url.replace( '-', '+', 'all' ).replace( '_', '/', 'all' );
var padded = base64 & repeatString( '=', 4 - ( len( base64 ) % 4 ) );
return binaryDecode( padded, 'base64' );
}
function binaryToBase64Url( source ) {
return binaryEncode( source, 'base64' )
.replace( '+', '-', 'all' )
.replace( '/', '_', 'all' )
.replace( '=', '', 'all' );
}
/**
* The INTEGER encoding for DER consists of a 02 tag a length encoding of the value
* and then a signed, minimum sized, big endian encoding of the encoded number.
*
* - https://stackoverflow.com/questions/54718741/how-to-der-encode-an-ecdsa-signature
*/
function derEncodeIntegerBytes( byteArray ) {
// first remove any padding
for ( var i = 1; i <= arrayLen( byteArray ); i++ ) {
if ( byteArray[ i ] != 0 ) break;
}
var unpadded = arraySlice( byteArray, i );
// add sign if negative
if ( unpadded[ 1 ] < 0 ) {
unpadded.prepend( 0 );
}
// if len > 127 the length encoding will be wrong, but that won't happen for the supported signature sizes
var derEncoded = [ 2, unpadded.len() ];
derEncoded.append( unpadded, true );
return derEncoded;
}
/**
* The SEQUENCE encoding is simply a tag set to the byte value 30, the
* length encoding and then the concatenation of the two INTEGER
* structures.
*
* https://stackoverflow.com/questions/54718741/how-to-der-encode-an-ecdsa-signature
*
* Also see:
* https://crypto.stackexchange.com/questions/57731/ecdsa-signature-rs-to-asn1-der-encoding-question
*/
function convertP1363ToDER( signature ) {
var split = len( signature ) / 2;
var r = derEncodeIntegerBytes( arraySlice( signature, 1, split ) );
var s = derEncodeIntegerBytes( arraySlice( signature, split + 1, split ) );
var DERSignature = [ 48 ];
var length = r.len() + s.len();
if ( length > 255 ) {
throw(
type = 'jwtcfml.InvalidSignature',
message = 'Invalid P1363 key.',
detail = 'The P1363 signature is too long.'
);
}
/*
The length is simply a single byte if it is smaller than 128 (or hex 80)
of the size. If it is larger then it is two byte: one byte set to 81,
which indicates that one length byte will follow, and one byte
containing the actual value.
https://stackoverflow.com/questions/54718741/how-to-der-encode-an-ecdsa-signature
*/
if ( length > 127 ) {
DERSignature.append( -127 );
length -= 256;
}
DERSignature.append( length );
DERSignature.append( r, true );
DERSignature.append( s, true );
return javacast( 'byte[]', DERSignature );
}
function convertDERtoP1363( required any signature, required string algorithm ) {
// extract the two integers from the DER signature
// assuming a 02 tag byte followed by a single length byte since we should not see
// anything larger in the supported algorithms
var start = 3;
while ( signature[ start ] != 2 ) start++;
var r = arraySlice( signature, start + 2, signature[ start + 1 ] );
var s = arraySlice( signature, start + 2 + r.len() + 2 );
if ( r[ 1 ] == 0 ) r = arraySlice( r, 2 );
if ( s[ 1 ] == 0 ) s = arraySlice( s, 2 );
var lengthMap = {
ES256: 32,
ES384: 48,
ES512: 64
};
var P1363Signature = [ ];
for ( var i = 1; i <= lengthMap[ algorithm ] - r.len(); i++ ) P1363Signature.append( 0 );
P1363Signature.append( r, true );
for ( var i = 1; i <= lengthMap[ algorithm ] - s.len(); i++ ) P1363Signature.append( 0 );
P1363Signature.append( s, true );
return javacast( 'byte[]', P1363Signature );
}
function parsePEMEncodedKey( required string pemKey ) {
if ( reFind( '^-----BEGIN (RSA|EC) (PARAMETERS|PRIVATE)', pemKey ) ) {
throw(
type = 'jwtcfml.InvalidPrivateKey',
message = 'Invalid private key format.',
detail = 'Please encode your private key in PKCS8 format, e.g.: `openssl pkcs8 -topk8 -nocrypt -in privatekey.pem -out privatekey.pk8'
)
}
var binaryKey = binaryDecode(
trim( pemKey ).reReplace( '-----[A-Z\s]+-----', '', 'all' ).reReplace( '[\r\n]', '', 'all' ),
'base64'
);
if ( find( '-----BEGIN CERTIFICATE-----', pemKey ) ) {
var bis = createObject( 'java', 'java.io.ByteArrayInputStream' ).init( binaryKey );
return createObject( 'java', 'java.security.cert.CertificateFactory' )
.getInstance( 'X.509' )
.generateCertificate( bis )
.getPublicKey();
}
if ( find( '-----BEGIN PUBLIC KEY-----', pemKey ) ) {
var publicKeySpec = createObject( 'java', 'java.security.spec.X509EncodedKeySpec' ).init( binaryKey );
try {
return createObject( 'java', 'java.security.KeyFactory' )
.getInstance( 'RSA' )
.generatePublic( publicKeySpec );
} catch ( any e ) {
}
try {
return createObject( 'java', 'java.security.KeyFactory' )
.getInstance( 'EC' )
.generatePublic( publicKeySpec );
} catch ( any e ) {
}
}
if ( find( '-----BEGIN PRIVATE KEY-----', pemKey ) ) {
var privateKeySpec = createObject( 'java', 'java.security.spec.PKCS8EncodedKeySpec' ).init( binaryKey );
try {
return createObject( 'java', 'java.security.KeyFactory' )
.getInstance( 'RSA' )
.generatePrivate( privateKeySpec );
} catch ( any e ) {
}
try {
return createObject( 'java', 'java.security.KeyFactory' )
.getInstance( 'EC' )
.generatePrivate( privateKeySpec );
} catch ( any e ) {
}
}
throw(
type = 'jwtcfml.InvalidPEMKey',
message = 'Invalid PEM key.',
detail = 'Please ensure you are using an RSA or EC public or private key or certificate.'
)
}
function parseJWK( required struct jwk ) {
if ( jwk.kty == 'RSA' ) {
if ( jwk.keyExists( 'd' ) ) {
try {
var bigInts = bigIntegers( jwk, [ 'n', 'e', 'd', 'p', 'q', 'dp', 'dq', 'qi' ] );
var keySpec = createObject( 'java', 'java.security.spec.RSAPrivateCrtKeySpec' ).init(
bigInts.n,
bigInts.e,
bigInts.d,
bigInts.p,
bigInts.q,
bigInts.dp,
bigInts.dq,
bigInts.qi
);
var kf = createObject( 'java', 'java.security.KeyFactory' ).getInstance( 'RSA' );
return kf.generatePrivate( keySpec );
} catch ( any e ) {
}
try {
var bigInts = bigIntegers( jwk, [ 'n', 'd' ] );
var keySpec = createObject( 'java', 'java.security.spec.RSAPrivateKeySpec' ).init(
bigInts.n,
bigInts.d
);
var kf = createObject( 'java', 'java.security.KeyFactory' ).getInstance( 'RSA' );
return kf.generatePrivate( keySpec );
} catch ( any e ) {
}
} else {
try {
var bigInts = bigIntegers( jwk, [ 'n', 'e' ] );
var ks = createObject( 'java', 'java.security.spec.RSAPublicKeySpec' ).init( bigInts.n, bigInts.e );
var kf = createObject( 'java', 'java.security.KeyFactory' ).getInstance( 'RSA' );
return kf.generatePublic( ks );
} catch ( any e ) {
}
}
}
if ( jwk.kty == 'EC' ) {
var kf = createObject( 'java', 'java.security.KeyFactory' ).getInstance( 'EC' );
var ECParameterSpec = getECParameterSpec( jwk.crv );
if ( jwk.keyExists( 'd' ) ) {
var bigInts = bigIntegers( jwk, [ 'd' ] );
var ks = createObject( 'java', 'java.security.spec.ECPrivateKeySpec' ).init(
bigInts.d,
ECParameterSpec
);
return kf.generatePrivate( ks );
} else {
var bigInts = bigIntegers( jwk, [ 'x', 'y' ] );
var ECPoint = createObject( 'java', 'java.security.spec.ECPoint' ).init( bigInts.x, bigInts.y );
var ks = createObject( 'java', 'java.security.spec.ECPublicKeySpec' ).init( ECPoint, ECParameterSpec );
return kf.generatePublic( ks );
}
}
throw(
type = 'jwtcfml.InvalidJWK',
message = 'Invalid JWK key.',
detail = 'Please ensure you are using an valid JWK RSA or EC public or private key.'
)
}
private function bigIntegers( jwk, keys ) {
var bigInts = { };
for ( var key in keys ) {
bigInts[ key ] = createObject( 'java', 'java.math.BigInteger' ).init( 1, base64UrlToBinary( jwk[ key ] ) );
}
return bigInts;
}
private function getECParameterSpec( crv ) {
if ( !variables.ECParameterSpecCache.keyExists( crv ) ) {
var kpg = createObject( 'java', 'java.security.KeyPairGenerator' ).getInstance( 'EC' );
var ecgp = createObject( 'java', 'java.security.spec.ECGenParameterSpec' ).init(
'secp#crv.listLast( '-' )#r1'
);
kpg.initialize( ecgp );
variables.ECParameterSpecCache[ crv ] = kpg
.generateKeyPair()
.getPublic()
.getParams();
}
return variables.ECParameterSpecCache[ crv ];
}
}
```
## v1/lib/expression_parser.cfc
```cfml
```
## v1/lib/field.cfm
```cfml
```
## v1/lib/field_set.cfm
```cfml
```
## v1/lib/filter_build.cfm
```cfml
AND #listGetAt(fltr.expression,i,"?")##fltr.field#
= <> <= < >= > LIKE ILIKE LIKE ILIKE IN () = #fltr.field#
```
## v1/lib/index.cfm
```cfml
index ***
```
## v1/lib/jwt.cfc
```cfml
component {
variables.algorithmMap = {
HS256: 'HmacSHA256',
HS384: 'HmacSHA384',
HS512: 'HmacSHA512',
RS256: 'SHA256withRSA',
RS384: 'SHA384withRSA',
RS512: 'SHA512withRSA',
ES256: 'SHA256withECDSA',
ES384: 'SHA384withECDSA',
ES512: 'SHA512withECDSA'
};
public any function init() {
variables.encodingUtils = new encodingUtils();
variables.jss = createObject( 'java', 'java.security.Signature' );
variables.messageDigest = createObject( 'java', 'java.security.MessageDigest' );
return this;
}
public string function encode(
required struct payload,
required any key,
required string algorithm,
struct headers = { }
) {
if ( !algorithmMap.keyExists( algorithm ) ) {
throw(
type = 'jwtcfml.InvalidAlgorithm',
message = 'Invalid JWT Algorithm.',
detail = 'The passed in algorithm is not supported.'
);
}
var header = { };
header.append( headers );
header.append( {
'typ': 'JWT',
'alg': algorithm
} );
var duplicatedPayload = duplicate( payload );
for ( var claim in [ 'iat', 'exp', 'nbf' ] ) {
if ( duplicatedPayload.keyExists( claim ) && isDate( duplicatedPayload[ claim ] ) ) {
duplicatedPayload[ claim ] = encodingUtils.convertDateToUnixTimestamp( duplicatedPayload[ claim ] );
}
}
var stringToSignParts = [
encodingUtils.binaryToBase64Url( charsetDecode( serializeJSON( header ), 'utf-8' ) ),
encodingUtils.binaryToBase64Url( charsetDecode( serializeJSON( duplicatedPayload ), 'utf-8' ) )
];
var stringToSign = stringToSignParts.toList( '.' );
return stringToSign & '.' & encodingUtils.binaryToBase64Url( sign( stringToSign, key, algorithm ) );
}
public struct function decode(
required string token,
any key,
any algorithms = [ ],
struct claims = { },
boolean verify = true
) {
var parts = listToArray( token, '.' );
if ( arrayLen( parts ) != 3 ) {
throw(
type = 'jwtcfml.InvalidToken',
message = 'Invalid JWT.',
detail = 'The passed in token does not have three `.` delimited parts.'
);
}
algorithms = isArray( algorithms ) ? algorithms : [ algorithms ];
var decoded = {
header: deserializeJSON( charsetEncode( encodingUtils.base64UrlToBinary( parts[ 1 ] ), 'utf-8' ) ),
payload: deserializeJSON( charsetEncode( encodingUtils.base64UrlToBinary( parts[ 2 ] ), 'utf-8' ) )
};
if ( verify ) {
if (
!algorithms.find( decoded.header.alg ) ||
!algorithmMap.keyExists( decoded.header.alg )
) {
throw(
type = 'jwtcfml.InvalidAlgorithm',
message = 'Unsupported or invalid algorithm',
detail = 'The passed in token does not have an algorithm declaration or its declared algorithm (#decoded.header.alg#) does not match the specified algorithms of #serializeJSON( algorithms )#.'
);
}
var stringToSign = parts[ 1 ] & '.' & parts[ 2 ];
var signature = encodingUtils.base64UrlToBinary( parts[ 3 ] );
if (
!verifySignature(
stringToSign,
key,
signature,
decoded.header.alg
)
) {
throw(
type = 'jwtcfml.InvalidSignature',
message = 'Signature is Invalid',
detail = 'The signature of the passed in token is invalid.'
);
}
var baseClaims = {
'exp': true,
'nbf': true
};
baseClaims.append( claims );
verifyClaims( decoded.payload, baseClaims );
}
for ( var claim in [ 'iat', 'exp', 'nbf' ] ) {
if ( decoded.payload.keyExists( claim ) ) {
decoded.payload[ claim ] = encodingUtils.convertUnixTimestampToDate( decoded.payload[ claim ] );
}
}
return decoded.payload;
}
public struct function getHeader( required string token ) {
return deserializeJSON( charsetEncode( encodingUtils.base64UrlToBinary( listFirst( token, '.' ) ), 'utf-8' ) );
}
public function parsePEMEncodedKey( required string pemKey ) {
return encodingUtils.parsePEMEncodedKey( pemKey );
}
public function parseJWK( required struct jwk ) {
return encodingUtils.parseJWK( jwk );
}
private function sign( message, key, algorithm ) {
if ( left( algorithm, 1 ) == 'H' ) {
var sig = binaryDecode(
hmac(
message,
key,
algorithmMap[ algorithm ],
'utf-8'
),
'hex'
);
} else {
if ( isSimpleValue( key ) ) {
key = encodingUtils.parsePEMEncodedKey( key );
} else if ( isStruct( key ) ) {
key = encodingUtils.parseJWK( key );
}
var jssInstance = variables.jss.getInstance( algorithmMap[ algorithm ] );
jssInstance.initSign( key );
jssInstance.update( charsetDecode( message, 'utf-8' ) );
var sig = jssInstance.sign();
if ( left( algorithm, 1 ) == 'E' ) {
sig = encodingUtils.convertDERtoP1363( sig, algorithm );
}
}
return sig;
}
private function verifySignature( message, key, signature, algorithm ) {
if ( left( algorithm, 1 ) == 'H' ) {
var sig = binaryDecode(
hmac(
message,
key,
algorithmMap[ algorithm ],
'utf-8'
),
'hex'
);
return MessageDigest.isEqual( signature, sig );
}
if ( left( algorithm, 1 ) == 'E' ) {
signature = encodingUtils.convertP1363ToDER( signature );
}
if ( isSimpleValue( key ) ) {
key = encodingUtils.parsePEMEncodedKey( key );
} else if ( isStruct( key ) ) {
key = encodingUtils.parseJWK( key );
}
var jssInstance = variables.jss.getInstance( algorithmMap[ algorithm ] );
jssInstance.initVerify( key );
jssInstance.update( charsetDecode( message, 'utf-8' ) );
return jssInstance.verify( signature );
}
private function verifyClaims( payload, claims ) {
if (
structKeyExists( payload, 'exp' )
&& !verifyDateClaim( payload.exp, claims.exp, -1 )
) {
throw(
type = 'jwtcfml.ExpiredSignature',
message = 'Token has expired',
detail = 'The passed in token has expired.'
);
}
if (
structKeyExists( payload, 'nbf' )
&& !verifyDateClaim( payload.nbf, claims.nbf, 1 )
) {
throw(
type = 'jwtcfml.NotBeforeException',
message = 'Token is not valid',
detail = 'The passed in token has not yet become valid.'
);
}
if ( structKeyExists( claims, 'iss' ) ) {
if ( !structKeyExists( payload, 'iss' ) || compare( payload.iss, claims.iss ) != 0 ) {
throw(
type = 'jwtcfml.InvalidIssuer',
message = 'Token has an invalid issuer',
detail = 'The passed in token either does not specify an issuer or the claimed issuer is not valid.'
);
}
}
if ( structKeyExists( claims, 'aud' ) ) {
var audArray = isArray( claims.aud ) ? claims.aud : [ claims.aud ];
if ( !structKeyExists( payload, 'aud' ) || !audArray.find( payload.aud ) ) {
throw(
type = 'jwtcfml.InvalidAudience',
message = 'Token has an invalid audience',
detail = 'The passed in token either does not specify an audience or the claimed audience is not valid.'
);
}
}
}
private function verifyDateClaim( payloadDate, claim, failState ) {
var pd = encodingUtils.convertUnixTimestampToDate( payloadDate );
var cd = claim;
if ( !isBoolean( cd ) || cd ) {
if ( isNumeric( cd ) ) {
cd = encodingUtils.convertUnixTimestampToDate( cd );
} else if ( !isDate( cd ) ) {
cd = now();
}
return dateCompare( pd, cd ) != failState;
}
return true;
}
}
```
## v1/lib/notifier.cfc
```cfml
```
## v1/lib/order_build.cfm
```cfml
```
## v1/lib/rest_api_helper.cfc
```cfml
```
## v1/resources/available_resource_realms.cfc
```cfml
select
s.specification_id
s.specification
c.contract_id
c.contract
u.usr_id
u.login
z.contragent_id
z.contragent
z.external_code
from specification s
left outer join contract c on (s.contract_id=c.contract_id)
left outer join usr u on (c.contragent_id=u.contragent_id)
left outer join contragent z on (u.contragent_id=z.contragent_id)
where u.usr_id=
order by specification_id desc;
```
## v1/resources/bookmark.cfc
```cfml
select
b.bookmark_uid::text as bookmark_uid
b.bookmark
b.descr
b.url
b.icon_url
b.contragent_id
b.sort
b.is_enabled
to_char(b.dt_created, 'YYYY-MM-DD"T"HH24:MI:SS.FF3TZHTZM') as dt_created
to_char(b.dt_updated, 'YYYY-MM-DD"T"HH24:MI:SS.FF3TZHTZM') as dt_updated
from bookmark b
where b.bookmark_uid=
AND (b.contragent_id = OR b.contragent_id=-1)
update bookmark set
dt_updated=
,updater_id=
,bookmark=
,descr=
,url=
,icon_url=
,sort=
,is_enabled=
where
contragent_id=
AND bookmark_uid=;
```
## v1/resources/bookmark_ls.cfc
```cfml
select
b.bookmark_uid::text as bookmark_uid
b.bookmark
b.descr
b.url
b.icon_url
b.contragent_id
b.sort
b.is_enabled
to_char(b.dt_created, 'YYYY-MM-DD"T"HH24:MI:SS.FF3TZHTZM') as dt_created
to_char(b.dt_updated, 'YYYY-MM-DD"T"HH24:MI:SS.FF3TZHTZM') as dt_updated
from bookmark b
where 1=1
AND (b.contragent_id =
OR b.contragent_id=-1)
order by b.contragent_id desc, b.sort asc
limit #maxrows#
select count(*) as cnt
from bookmark b
where 1=1
AND (b.contragent_id = )
insert into bookmark (
bookmark_uid,contragent_id, bookmark,url,icon_url,descr,sort,is_enabled,dt_created,creator_id
) values (
,
,
,
,
,
,
,
,
,
);
function plain2htm(s) {
return replace(replace(s, chr(13),'',"ALL"),chr(10),'
', "ALL");
}
function htm2plain(s) {
return replaceNoCase(s, '
', '#chr(13)##chr(10)#', "ALL");
}
function cleanHtm(s) {
return replaceList(s, '<,>,"', '<,>,"');
}
```
## v1/resources/catalog_service_ls.cfc
```cfml
select
service_id
business_line_id
business_line
area_id
area
area_code
analytic_code
abstract_service_id
abstract_service
abstract_service_code
abstract_service_status_id
abstract_service_status
service_code
service
modifier
modifier_code
measure_id
service_status_id
service_status
measure_short
sort
vat_perc
vat_free
vat_rate
capacity_legend
commercial_note
is_published
dt_load
from service_catalog.service s
where 1=1
order by analytic_code
, abstract_service
, service_id
, coalesce(sort,0)
limit #maxrows#
select count(*) as cnt
from service_catalog.service s
function plain2htm(s) {
return replace(replace(s, chr(13),'',"ALL"),chr(10),'
', "ALL");
}
function htm2plain(s) {
return replaceNoCase(s, '
', '#chr(13)##chr(10)#', "ALL");
}
function cleanHtm(s) {
return replaceList(s, '<,>,"', '<,>,"');
}
```
## v1/resources/catalog_service_param_ls.cfc
```cfml
select
p.service_param_id
p.service_id
p.param
p.component_code
p.component
p.measure_id
p.measure_short
p.min_value
p.max_value
p.incr
p.param_class_sort
p.param_sort
p.sku
p.is_multiple
p.dt_load
s.business_line_id
s.business_line
s.area_id
s.area
s.area_code
s.analytic_code
s.abstract_service_id
s.abstract_service
s.abstract_service_code
s.abstract_service_status_id
s.abstract_service_status
s.service_code
s.service
s.modifier
s.modifier_code
s.service_status_id
s.service_status
s.sort
s.vat_perc
s.vat_free
s.vat_rate
s.capacity_legend
commercial_note
s.is_published
from service_catalog.service_param p
join service_catalog.service s on (p.service_id=s.service_id)
where 1=1
order by analytic_code
, abstract_service
, service_id
, coalesce(sort,0)
limit #maxrows#
select count(*) as cnt
from service_catalog.service_param p
join service_catalog.service s on (p.service_id=s.service_id)
function plain2htm(s) {
return replace(replace(s, chr(13),'',"ALL"),chr(10),'
', "ALL");
}
function htm2plain(s) {
return replaceNoCase(s, '
', '#chr(13)##chr(10)#', "ALL");
}
function cleanHtm(s) {
return replaceList(s, '<,>,"', '<,>,"');
}
```
## v1/resources/err.cfc
```cfml
```
## v1/resources/instance.cfc
```cfml
select
e.instance_uid::text as instance_uid
e.display_name
e.service_id
e.descr
e.specification_item_id
e.is_auxiliary
to_char(e.dt_created, 'YYYY-MM-DD"T"HH24:MI:SS.FF3TZHTZM') as instance_config_dt_created
to_char(e.dt_updated, 'YYYY-MM-DD"T"HH24:MI:SS.FF3TZHTZM') as instance_config_dt_updated
d.contract_id
i.specification_id
s.specification
i.quantity
i.price
v.svc
v.code
v.man
e.updater_id
u.login as updater_login
u.shortname as updater_shortname
cast(st.instance_data->>'params' as json)->>'resourceRealm' as resource_realm
coalesce((io.dt_start IS NOT NULL AND io.dt_finish IS NULL AND io.submit_result='201'),false) as operation_is_in_progress
coalesce((io.dt_start IS NULL AND io.submit_result='201'),false) as operation_is_pending
case
when io.operation IN ('delete', 'suspend') AND io.is_successful then 0 /*null*/
when io.is_successful then extract('epoch' from CURRENT_TIMESTAMP - coalesce(io.dt_finish,CURRENT_TIMESTAMP))
else 0 end
as uptime
(case
when st.instance_uid IS NULL then 'not created'
when st.is_deleted = 'true' then 'deleted'
when st.is_suspended = 'true' then 'suspended'
/*when coalesce(st.is_deleted,'false') = 'false' AND coalesce(st.is_suspended, 'false') = 'false' then 'running'*/
when coalesce(st.is_deleted,'false') = 'false' AND coalesce(st.is_suspended, 'false') = 'false' then 'running'
when io.instance_uid IS NULL then 'not configured'
else null end
) as explained_status
(select count(distinct r.resource_realm)
from resource_realm r
join resource_realm_access a on (
r.resource_realm_id=a.resource_realm_id
AND (a.contract_id IN (
select contract_id
from contract d
where d.contragent_id=k.contragent_id AND NOT d.is_closed
) OR a.contract_id=0) /*0 means access to any contract*/
AND a.is_enabled)
where r.resource_realm_type_id=v.resource_realm_type_id) as resource_realm_cnt
from instance e
left outer join specification_item i on (e.specification_item_id=i.specification_item_id)
left outer join specification s on (i.specification_id=s.specification_id)
left outer join contract d on (s.contract_id=d.contract_id)
left outer join contragent k on (d.contragent_id=k.contragent_id)
left outer join svc v on (e.service_id=v.svc_id)
left outer join usr u on (e.updater_id=u.usr_id)
left outer join (select ist.instance_state_uid, ist.instance_uid, ist.version, ist.dt_state, ist.is_test
,(ist.instance_data->>'isSuspended') as is_suspended
,(ist.instance_data->>'isDeleted') as is_deleted
,ist.instance_data
from instance_state ist join (select instance_uid, max(version) as version from instance_state group by 1) lastv
on (ist.instance_uid=lastv.instance_uid AND ist.version=lastv.version) ) st
on (e.instance_uid=st.instance_uid)
left outer join (select o.instance_operation_uid, o.instance_uid, o.operation, o.dt_submit, o.submit_result, o.dt_start, o.dt_finish, o.is_successful
from instance_operation o join (select instance_uid, max(dt_submit) as dt_submit from instance_operation group by 1) lastv
on (o.instance_uid=lastv.instance_uid AND o.dt_submit=lastv.dt_submit) ) io
on (e.instance_uid=io.instance_uid)
where e.instance_uid=
AND s.specification_id=
select
st.instance_state_uid::text as instance_state_uid
st.version
st.creator_id
to_char(st.dt_state, 'YYYY-MM-DD"T"HH24:MI:SS.FF3TZHTZM') as dt_state
st.is_test
st.instance_operation_uid::text as instance_operation_uid
st.instance_data->>'out' as out
st.instance_data->>'params' as params
st.instance_data->>'vault' as vault
(st.instance_data->>'isDeleted')::boolean as is_deleted
(st.instance_data->>'isSuspended')::boolean as is_suspended
from instance_state st
where st.instance_uid=
order by st.version desc
limit 1
select
o.instance_operation_uid::text as instance_operation_uid
status.instance_state_uid::text as instance_state_uid
status.version as state_version
o.operation
o.resource_realm_id
r.resource_realm
to_char(o.dt_submit, 'YYYY-MM-DD"T"HH24:MI:SS.FF3TZHTZM') as dt_submit
o.submit_result
to_char(o.dt_start, 'YYYY-MM-DD"T"HH24:MI:SS.FF3TZHTZM') as dt_start
to_char(o.dt_finish, 'YYYY-MM-DD"T"HH24:MI:SS.FF3TZHTZM') as dt_finish
extract('epoch' from coalesce(o.dt_finish,CURRENT_TIMESTAMP)- o.dt_start) as duration
round(extract('epoch' from CURRENT_TIMESTAMP - coalesce(o.dt_finish,CURRENT_TIMESTAMP)),1) as seconds_passed
o.is_successful
to_char(o.dt_created, 'YYYY-MM-DD"T"HH24:MI:SS.FF3TZHTZM') as dt_created
o.error_log
o.note
u.login as updater_login
u.shortname as updater_shortname
coalesce((o.dt_start IS NOT NULL AND o.dt_finish IS NULL AND o.submit_result='201'),false) as is_in_progress
coalesce((o.dt_start IS NULL AND o.submit_result='201'),false) as is_pending
from instance_operation o
left outer join usr u on (o.updater_id=u.usr_id)
left outer join resource_realm r on o.resource_realm_id=r.resource_realm_id
left outer join (select instance_operation_uid, max(version) as version from instance_state
group by instance_operation_uid) sts on (o.instance_operation_uid=sts.instance_operation_uid)
left outer join instance_state status on (sts.instance_operation_uid=status.instance_operation_uid AND sts.version=status.version)
where o.instance_uid=
--order by status.version desc
order by o.dt_created desc
(select io.operation from instance_operation io where io.instance_uid=e.instance_uid order by dt_submit desc limit 1) as current_operation --->
select
so.svc_operation_id
so.operation
(select instance_operation_uid::text
from instance_operation io
where io.instance_uid=
AND io.operation=so.operation AND io.dt_submit IS NULL
order by io.dt_created desc
limit 1
)as instance_operation_uid
from svc_operation so
where so.svc_id=
AND NOT so.operation='create'
AND so.operation='create'
AND 1=0
order by so.svc_operation_id
select
p.param
sop.descr
s.svc_id
s.svc
s.code
sop.label
p.param_value as uid
r.display_name
r.is_auxiliary
c.contract_id
c.contract
to_char(c.dt_contract, 'YYYY-MM-DD"T"HH24:MI:SS.FF3TZHTZM') as dt_contract
k.external_code
from instance_cfs_param p
left outer join instance_operation_cfs_param iop on (p.instance_operation_cfs_param_uid=iop.instance_operation_cfs_param_uid)
left outer join instance_operation o on (iop.instance_operation_uid=o.instance_operation_uid)
left outer join instance e on (o.instance_uid=e.instance_uid)
left outer join svc_operation so on (o.operation=so.operation AND e.service_id=so.svc_id)
left outer join svc_operation_cfs_param sop on (so.svc_operation_id=sop.svc_operation_id AND p.param=sop.svc_operation_cfs_param)
left outer join svc s on (sop.ref_svc_id=s.svc_id)
join instance r on (p.param_value=r.instance_uid::text)
left outer join specification_item si on (r.specification_item_id=si.specification_item_id)
left outer join specification sp on (si.specification_id=sp.specification_id)
left outer join contract c on (sp.contract_id=c.contract_id)
left outer join contragent k on (c.contragent_id=k.contragent_id)
where p.instance_uid=
AND sop.ref_svc_id > 0
order by sop.sort, p.param
select
p.param
sop.descr
s.svc_id
s.svc
s.code
sop.label
e.instance_uid::text as uid
e.display_name
e.is_auxiliary
c.contract_id
c.contract
to_char(c.dt_contract, 'YYYY-MM-DD"T"HH24:MI:SS.FF3TZHTZM') as dt_contract
k.external_code
from instance_cfs_param p
left outer join instance_operation_cfs_param iop on (p.instance_operation_cfs_param_uid=iop.instance_operation_cfs_param_uid)
left outer join instance_operation o on (iop.instance_operation_uid=o.instance_operation_uid)
left outer join instance e on (o.instance_uid=e.instance_uid)
left outer join svc s on (e.service_id=s.svc_id)
left outer join svc_operation so on (o.operation=so.operation AND e.service_id=so.svc_id)
left outer join svc_operation_cfs_param sop on (so.svc_operation_id=sop.svc_operation_id AND p.param=sop.svc_operation_cfs_param)
left outer join svc r on (sop.ref_svc_id=r.svc_id)
left outer join specification_item si on (e.specification_item_id=si.specification_item_id)
left outer join specification sp on (si.specification_id=sp.specification_id)
left outer join contract c on (sp.contract_id=c.contract_id)
left outer join contragent k on (c.contragent_id=k.contragent_id)
where
p.param_value=
AND r.svc_id=(select i.service_id
from instance i
where i.instance_uid=
)
select
p.svc_operation_cfs_param
,p.svc_operation_cfs_param_id
,p.label
,p.descr
,p.is_sensitive
,p.data_type
,null as data_descriptor
,(select instance_operation_cfs_param_uid from instance_operation_cfs_param iop
join svc_operation_cfs_param sop on (iop.svc_operation_cfs_param_id=sop.svc_operation_cfs_param_id)
join instance_operation io on (iop.instance_operation_uid=io.instance_operation_uid)
where sop.svc_operation_cfs_param_id=p.svc_operation_cfs_param_id AND
io.instance_uid= AND
io.instance_operation_uid=
--limit 1
)
from svc_operation_cfs_param p
join svc_operation o on (p.svc_operation_id=o.svc_operation_id)
join svc on (o.svc_id=svc.svc_id)
where svc.svc_id=
AND o.operation='create'
update instance set
dt_updated=
,updater_id=
,display_name=
,descr=
where instance_uid=;
--select @@rowcount as cnt;
select count(*) as cnt
from instance e
join specification_item si on (e.specification_item_id=si.specification_item_id)
where e.instance_uid=
AND si.specification_id=
select count(*) as cnt
from instance_operation io
where io.dt_finish IS NULL AND
io.submit_result like '2%' /*201 etc*/ AND
io.instance_uid=
select count(*) as cnt
from instance_state st
where
st.instance_uid=
delete from instance_state
where instance_uid=;
delete from instance_operation
where instance_uid=;
delete from instance
where instance_uid=;
```
## v1/resources/instance_default.cfc
```cfml
select
s.svc_id
s.svc
s.descr
s.man
from svc s
where s.svc_id=
order by 1
```
## v1/resources/instance_ls.cfc
```cfml
"monitoring_url"={prefix="inr", type="string"},
"instance_state_uid"={prefix="inr", type="guid"},
"is_deleted"={prefix="inr", type="string"},
"is_suspended"={prefix="inr", type="string"},
"job_is_pending"={prefix="inr", type="string"},
"resource_realm"={prefix="inr", type="string"},
"resource_realm_type_id"={prefix="inr", type="integer"},
"operation_is_in_progress"={prefix="inr", type="boolean"},
"operation_is_pending"={prefix="inr", type="boolean"},
"is_test"={prefix="inr", type="boolean"},
"is_auxiliary"={prefix="inr", type="boolean"},
"explained_status"={prefix="inr", type="string"},
"dt_state"={prefix="inr", type="date"},
"version"={prefix="inr", type="integer"}
}
/>
to_char(e.dt_created, 'YYYY-MM-DD"T"HH24:MI:SS.FF3TZHTZM') as instance_config_dt_created
to_char(e.dt_updated, 'YYYY-MM-DD"T"HH24:MI:SS.FF3TZHTZM') as instance_config_dt_updated
e.instance_uid::text as instance_uid
e.display_name
e.service_id
e.specification_item_id
e.is_auxiliary
d.contract_id
i.specification_id
s.specification
i.quantity
i.price
v.svc
v.code
v.resource_realm_type_id
e.updater_id
u.login as updater_login
u.shortname as updater_shortname
io.operation as last_operation
io.instance_operation_uid::text as last_operation_uid
io.submit_result as submit_result
coalesce((io.dt_start IS NOT NULL AND io.dt_finish IS NULL AND io.submit_result='201'),false) as operation_is_in_progress
coalesce((io.dt_start IS NULL AND io.submit_result='201'),false) as operation_is_pending
to_char(io.dt_start, 'YYYY-MM-DD"T"HH24:MI:SS.FF3TZHTZM') as operation_dt_start
to_char(io.dt_finish, 'YYYY-MM-DD"T"HH24:MI:SS.FF3TZHTZM') as operation_dt_finish
round(extract('epoch' from coalesce(io.dt_finish,CURRENT_TIMESTAMP)- io.dt_start),1) as duration
case
when io.operation IN ('delete', 'suspend') AND io.is_successful then 0 /*null*/
when io.is_successful then extract('epoch' from CURRENT_TIMESTAMP - coalesce(io.dt_finish,CURRENT_TIMESTAMP))
else 0 end
as uptime
to_char(io.dt_finish, 'YYYY-MM-DD"T"HH24:MI:SS.FF3TZHTZM') as dt_deploy
st.instance_state_uid::text as instance_state_uid
st.is_test as is_test
coalesce(st.instance_data->>'isDeleted','false') as is_deleted
st.instance_data->>'isSuspended' as is_suspended
st.instance_data->'job'->>'pending' as job_is_pending
st.instance_data->'out'->'monitoring'->>'resourceMetrics' as monitoring_url
st.instance_data->'params'->>'resourceRealm' as resource_realm
to_char(st.dt_state, 'YYYY-MM-DD"T"HH24:MI:SS.FF3TZHTZM') as dt_state
(case
when st.instance_uid IS NULL then 'not created'
when job_is_pending = 'true' then 'pending'
when st.is_deleted = 'true' then 'deleted'
when st.is_suspended = 'true' then 'suspended'
when coalesce(st.is_deleted,'false') = 'false' AND coalesce(st.is_suspended, 'false') = 'false' then 'running'
when io.instance_uid IS NULL then 'not configured'
else null end
) as explained_status
st.version
select count(*) as cnt
from (
select
'' as placeholder
#preserveSingleQuotes(definedQueryFields)#
from instance e
join specification_item i on (e.specification_item_id=i.specification_item_id)
join specification s on (i.specification_id=s.specification_id)
join contract d on (s.contract_id=d.contract_id)
join contragent k on (d.contragent_id=k.contragent_id)
join svc v on (e.service_id=v.svc_id)
left outer join usr u on (e.updater_id=u.usr_id)
left outer join (select ist.instance_state_uid, ist.instance_uid, ist.version, ist.dt_state, ist.is_test
,(ist.instance_data->>'isSuspended') as is_suspended
,(ist.instance_data->>'isDeleted') as is_deleted
,(ist.instance_data->'job'->>'pending') as job_is_pending
,(ist.instance_data->'out'->'monitoring'->>'resourceMetrics') as monitoring_url
,ist.instance_data
from instance_state ist
join (select instance_uid, max(version) as version from instance_state group by 1) lastv
on (ist.instance_uid=lastv.instance_uid AND ist.version=lastv.version)
) st on (e.instance_uid=st.instance_uid)
left outer join (select o.instance_operation_uid, o.instance_uid, o.operation, o.dt_submit, o.submit_result, o.dt_start, o.dt_finish, o.is_successful
from instance_operation o join (select instance_uid, max(dt_submit) as dt_submit from instance_operation group by 1
) lastv on (o.instance_uid=lastv.instance_uid AND o.dt_submit=lastv.dt_submit)
) io on (e.instance_uid=io.instance_uid)
where s.specification_id=
AND (
(e.display_name) ilike ()
OR ((coalesce(v.svc,'') ||' '|| coalesce(v.svc_short,'') ||' '|| coalesce(v.synonyms,''))) ilike ()
)
) inr
where 1=1
select
#local.fieldsToOutput#*
from (
select
#preserveSingleQuotes(definedQueryFields)#
from instance e
join specification_item i on (e.specification_item_id=i.specification_item_id)
join specification s on (i.specification_id=s.specification_id)
join contract d on (s.contract_id=d.contract_id)
join contragent k on (d.contragent_id=k.contragent_id)
join svc v on (e.service_id=v.svc_id)
left outer join usr u on (e.updater_id=u.usr_id)
left outer join (select ist.instance_state_uid, ist.instance_uid, ist.version, ist.dt_state, ist.is_test
,(ist.instance_data->>'isSuspended') as is_suspended
,(ist.instance_data->>'isDeleted') as is_deleted
,(ist.instance_data->'job'->>'pending') as job_is_pending
,ist.instance_data
from instance_state ist join (select instance_uid, max(version) as version from instance_state group by 1) lastv
on (ist.instance_uid=lastv.instance_uid AND ist.version=lastv.version) ) st
on (e.instance_uid=st.instance_uid)
left outer join (select o.instance_operation_uid, o.instance_uid, o.operation, o.dt_submit, o.submit_result, o.dt_start, o.dt_finish, o.is_successful
from instance_operation o join (select instance_uid, max(dt_submit) as dt_submit from instance_operation group by 1) lastv
on (o.instance_uid=lastv.instance_uid AND o.dt_submit=lastv.dt_submit) ) io
on (e.instance_uid=io.instance_uid)
where s.specification_id=
AND (
(e.display_name) ilike ()
OR ((coalesce(v.svc,'') ||' '|| coalesce(v.svc_short,'') ||' '|| coalesce(v.synonyms,''))) ilike ()
)
) inr
where 1=1
order by
limit #arguments.pageSize#
offset #arguments.pageSize*(arguments.page-1)#
select count(*) as cnt
from instance e
join specification_item i on (e.specification_item_id=i.specification_item_id)
join specification s on (i.specification_id=s.specification_id)
join contract d on (s.contract_id=d.contract_id)
join contragent k on (d.contragent_id=k.contragent_id)
join svc v on (e.service_id=v.svc_id)
left outer join (select ist.instance_state_uid, ist.instance_uid, ist.version, ist.dt_state, ist.is_test
,(ist.instance_data->>'isSuspended') as is_suspended
,(ist.instance_data->>'isDeleted') as is_deleted
,ist.instance_data
from instance_state ist join (select instance_uid, max(version) as version from instance_state group by 1) lastv
on (ist.instance_uid=lastv.instance_uid AND ist.version=lastv.version) ) st
on (st.instance_uid=e.instance_uid)
left outer join (select o.instance_operation_uid, o.instance_uid, o.operation, o.dt_submit, o.submit_result, o.dt_start, o.dt_finish, o.is_successful
from instance_operation o join (select instance_uid, max(dt_submit) as dt_submit from instance_operation group by 1) lastv
on (o.instance_uid=lastv.instance_uid AND o.dt_submit=lastv.dt_submit) ) io
on (e.instance_uid=io.instance_uid)
where s.specification_id=
>
insert into specification_item
(specification_id, specification_item, svc_id, quantity, price, dt_created, creator_id, dt_updated, updater_id)
values
(
,
,
,
,
,
,
,
,
) returning specification_item_id;
insert into instance
(instance_uid, display_name, service_id, specification_item_id, descr, dt_created, creator_id, dt_updated, updater_id)
values
(
,
,
,
,
,
,
,
,
);
select count(*) as cnt from instance e
join specification_item i on (e.specification_item_id=i.specification_item_id)
join specification s on (i.specification_id=s.specification_id)
join contract d on (s.contract_id=d.contract_id)
join contragent k on (d.contragent_id=k.contragent_id)
join usr u on (k.contragent_id=u.contragent_id)
where u.usr_id=
AND lower(e.display_name)=lower()
AND e.instance_uid <>
AND (select cast(st.instance_data->>'isDeleted' as boolean) from instance_state st where st.instance_uid=e.instance_uid order by version desc limit 1) IS NOT TRUE
/*postgre specific. should take into account instances without state, ignoring explicitly deleted only*/
select coalesce(svc_short,svc) as svc_short from svc where svc_id=
select display_name
from instance e
join specification_item i on (e.specification_item_id=i.specification_item_id)
join specification s on (i.specification_id=s.specification_id)
join contract d on (s.contract_id=d.contract_id)
join contragent k on (d.contragent_id=k.contragent_id)
join usr u on (k.contragent_id=u.contragent_id)
where u.usr_id=
AND lower(e.display_name) like lower()
AND service_id=
```
## v1/resources/instance_operation.cfc
```cfml
select
o.instance_operation_uid::text as instance_operation_uid
o.operation
o.instance_uid::text as instance_uid
to_char(o.dt_submit, 'YYYY-MM-DD"T"HH24:MI:SS.FF3TZHTZM') as dt_submit
o.submit_result
o.error_log
o.note
to_char(o.dt_start, 'YYYY-MM-DD"T"HH24:MI:SS.FF3TZHTZM') as dt_start
to_char(o.dt_finish, 'YYYY-MM-DD"T"HH24:MI:SS.FF3TZHTZM') as dt_finish
extract('epoch' from coalesce(o.dt_finish,CURRENT_TIMESTAMP)- o.dt_start) as duration
o.is_successful
e.display_name
e.service_id
e.specification_item_id
to_char(o.dt_created, 'YYYY-MM-DD"T"HH24:MI:SS.FF3TZHTZM') as dt_created
to_char(o.dt_updated, 'YYYY-MM-DD"T"HH24:MI:SS.FF3TZHTZM') as dt_updated
o.updater_id
u.login as updater_login
u.shortname as updater_shortname
v.svc
so.man
so.svc_operation_id
coalesce((o.dt_start IS NOT NULL AND o.dt_finish IS NULL AND o.submit_result='201'),false) as is_in_progress
coalesce((o.dt_start IS NULL AND o.submit_result='201'),false) as is_pending
from instance_operation o
join instance e on (o.instance_uid=e.instance_uid)
join specification_item i on (e.specification_item_id=i.specification_item_id)
join specification s on (i.specification_id=s.specification_id)
join contract d on (s.contract_id=d.contract_id)
join contragent k on (d.contragent_id=k.contragent_id)
join svc v on (e.service_id=v.svc_id)
join svc_operation so on (v.svc_id=so.svc_id AND o.operation=so.operation)
left outer join usr u on (o.updater_id=u.usr_id)
where
o.instance_operation_uid=
AND s.specification_id=
select
ios.instance_operation_stage_uid::text as instance_operation_stage_uid
ios.stage
ios.is_successful
to_char(ios.dt_start, 'YYYY-MM-DD"T"HH24:MI:SS.FF3TZHTZM') as dt_start
to_char(ios.dt_finish, 'YYYY-MM-DD"T"HH24:MI:SS.FF3TZHTZM') as dt_finish
round(extract('epoch' from coalesce(ios.dt_finish,CURRENT_TIMESTAMP)- ios.dt_start),1) as duration
ios.stage_msg
from instance_operation_stage ios
where ios.instance_operation_uid=
order by dt_start asc
select
st.instance_state_uid::text as instance_state_uid
st.version
st.creator_id
to_char(st.dt_state, 'YYYY-MM-DD"T"HH24:MI:SS.FF3TZHTZM') as dt_state
st.is_test
st.instance_operation_uid::text as instance_operation_uid
st.instance_data::text as instance_data
from instance_state st
where st.instance_operation_uid=
order by st.version desc limit 1
select
st.instance_state_uid::text as instance_state_uid
st.version
st.creator_id
to_char(st.dt_state, 'YYYY-MM-DD"T"HH24:MI:SS.FF3TZHTZM') as dt_state
st.is_test
st.instance_operation_uid::text as instance_operation_uid
st.instance_data::text as instance_data
from instance_state st
where st.instance_uid=
order by st.version desc limit 1
select
iop.instance_operation_cfs_param_uid::text as instance_operation_cfs_param_uid
sop.svc_operation_cfs_param_id
case when sop.is_sensitive then '********' else iop.param_value end as param_value
to_char(iop.dt_created, 'YYYY-MM-DD"T"HH24:MI:SS.FF3TZHTZM') as dt_created
iop.creator_id
sop.svc_operation_cfs_param
sop.label
sop.data_type
null as data_descriptor
((isArray(x) OR isEmpty(x))? x : listToArray(x))#>sop.value_list
sop.ref_svc_id
sop.func
sop.nested_ref
sop.state_path
sop.expression
sop.depends_on_cfs_params
sop.is_required
sop.default_value
sop.regex
sop.unique_scope
sop.maxlength
sop.minlength
sop.maxvalue
sop.minvalue
sop.descr
sop.man
sop.sort
iop.note
sop.config::text as config
null as nested_ref_data
sop.is_sensitive
from svc_operation_cfs_param sop
left outer join instance_operation_cfs_param iop
on (sop.svc_operation_cfs_param_id=iop.svc_operation_cfs_param_id
AND iop.instance_operation_uid =
)
where sop.svc_operation_id =
order by sop.sort, sop.svc_operation_cfs_param_id
select sop.svc_operation_cfs_param_id, sop.svc_operation_cfs_param, sop.unique_scope
from svc_operation_cfs_param sop
join instance_operation_cfs_param iop on (sop.svc_operation_cfs_param_id=iop.svc_operation_cfs_param_id)
where iop.instance_operation_uid =
select io.instance_uid
from instance_operation io
join instance_operation_cfs_param iop on (io.instance_operation_uid=iop.instance_operation_uid)
where iop.instance_operation_uid =
SELECT p.param_value, sp.svc_operation_cfs_param, re.display_name
FROM instance_operation o
JOIN instance_operation_cfs_param p on (o.instance_operation_uid=p.instance_operation_uid)
join svc_operation_cfs_param sp on (p.svc_operation_cfs_param_id=sp.svc_operation_cfs_param_id)
JOIN instance_operation_cfs_param p2 on (p.instance_operation_uid=p2.instance_operation_uid)
JOIN instance re on (p2.param_value=re.instance_uid::text)
LEFT OUTER JOIN instance_cfs_param p3 on (re.instance_uid::text=p3.param_value)
LEFT OUTER JOIN instance_cfs_param p4 on (p3.instance_uid=p4.instance_uid AND sp.svc_operation_cfs_param=p4.param)
WHERE p.param_value=p4.param_value
AND p.instance_operation_uid=
AND p.svc_operation_cfs_param_id=
AND p4.instance_uid <>
AND (select cast(st.instance_data->>'isDeleted' as boolean) from instance_state st where st.instance_uid=p4.instance_uid order by version desc limit 1) IS NOT TRUE
```
## v1/resources/instance_operation_cfs_param.cfc
```cfml
select p.instance_operation_uid, o.instance_uid, p.svc_operation_cfs_param_id
from instance_operation_cfs_param p
join instance_operation o on (p.instance_operation_uid=o.instance_operation_uid)
where p.instance_operation_cfs_param_uid=
select o.instance_uid
from instance_operation o
where o.instance_operation_uid=
select p.param_value
from svc_operation_cfs_param s
join instance_operation_cfs_param p on (s.svc_operation_cfs_param_id = p.svc_operation_cfs_param_id)
where s.svc_operation_cfs_param = 'resourceRealm'
AND p.instance_operation_uid =
select r.svc_operation_cfs_param
from svc_operation_cfs_param r
join svc_operation o on (r.svc_operation_id=o.svc_operation_id)
join svc_operation_cfs_param p on (o.svc_operation_id=p.svc_operation_id)
where p.svc_operation_cfs_param_id =
AND r.ref_svc_id > 0
WITH RECURSIVE r AS (
SELECT
1 AS i
,e.display_name
,s.svc
,p.param
,p.param_value
,p.instance_uid::text
FROM instance e
JOIN instance_cfs_param p on (e.instance_uid=p.instance_uid)
JOIN svc s on (e.service_id=s.svc_id)
JOIN instance_operation_cfs_param op on (p.instance_operation_cfs_param_uid=op.instance_operation_cfs_param_uid)
LEFT JOIN svc_operation_cfs_param sp on (op.svc_operation_cfs_param_id=sp.svc_operation_cfs_param_id)
LEFT JOIN instance_cfs_param rp on (e.instance_uid=rp.instance_uid )
LEFT JOIN instance ri on (rp.instance_uid=ri.instance_uid)
WHERE e.instance_uid=
UNION
SELECT
i+1 AS i
,e.display_name
,s.svc
,p.param
,p.param_value
,p.instance_uid::text
FROM instance_cfs_param p
JOIN instance e on (p.instance_uid=e.instance_uid)
JOIN svc s on (e.service_id=s.svc_id)
JOIN r on (r.param_value=p.instance_uid::text)
WHERE r.i < 10
)
select param, param_value from r
order by r.i desc
WITH RECURSIVE r AS (
SELECT
1 AS i
,e.display_name
,s.svc
,sp.svc_operation_cfs_param as param
,p.param_value::text
,o.instance_uid::text
FROM instance e
JOIN instance_operation o ON (e.instance_uid=o.instance_uid AND o.operation='create')
JOIN instance_operation_cfs_param p on (o.instance_operation_uid=p.instance_operation_uid)
JOIN svc s on (e.service_id=s.svc_id)
--JOIN instance_operation_cfs_param op on (p.instance_operation_cfs_param_uid=op.instance_operation_cfs_param_uid)
JOIN svc_operation_cfs_param sp on (p.svc_operation_cfs_param_id=sp.svc_operation_cfs_param_id AND sp.ref_svc_id > 0)
--LEFT JOIN instance_cfs_param rp on (e.instance_uid=rp.instance_uid )
--LEFT JOIN instance ri on (rp.instance_uid=ri.instance_uid)
WHERE e.instance_uid=
UNION
SELECT
i+1 AS i
,e.display_name
,s.svc
,p.param
,p.param_value
,p.instance_uid::text
FROM instance_cfs_param p
JOIN instance e on (p.instance_uid=e.instance_uid)
JOIN svc s on (e.service_id=s.svc_id)
JOIN r on (r.param_value=p.instance_uid::text)
WHERE r.i < 10
)
select param, param_value from r
order by r.i desc
this.params[arguments.param]
select p.param_value
from instance_operation_cfs_param p
join svc_operation_cfs_param s on (p.svc_operation_cfs_param_id = s.svc_operation_cfs_param_id)
where p.instance_operation_uid =
AND s.svc_operation_cfs_param =
--->
select g.instance_state_uid, g.version, g.dt_state, g.instance_data, g.is_test, g.instance_uid
from instance_state g
where g.instance_uid=
order by g.version desc
limit 1
select r.resource_realm_id, r.properties
from resource_realm r
where r.resource_realm=
select
iop.instance_operation_cfs_param_uid::text as instance_operation_cfs_param_uid
iop.instance_operation_uid::text as instance_operation_uid
iop.svc_operation_cfs_param_id
case when sop.is_sensitive then '********' else iop.param_value end as param_value
iop.note
to_char(iop.dt_created, 'YYYY-MM-DD"T"HH24:MI:SS.FF3TZHTZM') as dt_created
iop.creator_id
sop.svc_operation_cfs_param
sop.data_type
null as data_descriptor
((isArray(x) OR isEmpty(x))? x : listToArray(x))#>sop.value_list
u.login as creator_login
u.shortname as creator_shortname
sop.is_sensitive
sop.is_hidden
sop.is_disabled
sop.man
sop.func
sop.expression
sop.nested_ref
sop.state_path
sop.depends_on_cfs_params
sop.config::text as config
e.service_id
e.instance_uid::text as instance_uid
from instance_operation_cfs_param iop
join svc_operation_cfs_param sop on (iop.svc_operation_cfs_param_id=sop.svc_operation_cfs_param_id)
join instance_operation io on (iop.instance_operation_uid=io.instance_operation_uid)
join instance e on (io.instance_uid=e.instance_uid)
join specification_item si on (e.specification_item_id=si.specification_item_id)
left outer join usr u on (iop.creator_id=u.usr_id)
where iop.instance_operation_cfs_param_uid=
AND si.specification_id=
select g.instance_state_uid, g.version, g.instance_data, g.is_test, g.instance_uid
from instance_state g
where g.instance_uid=
order by g.version desc
limit 1
select
io.dt_submit, io.submit_result
from instance_operation_cfs_param iop
join instance_operation io on iop.instance_operation_uid=io.instance_operation_uid
where iop.instance_operation_cfs_param_uid=
select count(*) as cnt
from instance_operation_cfs_param iop
join instance_operation io on (iop.instance_operation_uid=io.instance_operation_uid)
join instance e on (io.instance_uid=e.instance_uid)
join specification_item si on (e.specification_item_id=si.specification_item_id)
where iop.instance_operation_cfs_param_uid=
AND si.specification_id=
delete from instance_operation_cfs_param
where instance_operation_cfs_param_uid=
update instance_operation_cfs_param set
dt_created=
,creator_id=
,param_value=
,note=
where instance_operation_cfs_param_uid=
select svc_operation_cfs_param_id
from instance_operation_cfs_param
where instance_operation_cfs_param_uid=
select
sp.svc_operation_cfs_param_id
,sp.svc_operation_cfs_subparam_id
,sp.svc_operation_cfs_subparam
,sp.label
,sp.data_type
,sp.value_list
,sp.is_required
,sp.descr
,sp.man
,sp.default_value
,sp.minlength
,sp.maxlength
,sp.regex
,sp.sort
,sp.is_sensitive
,sp.depends_on_cfs_params
,sp.expression
,sp.ref_svc_id
,sp.unique_scope
,sp.default_compute
,sp.is_hidden
,sp.is_disabled
from svc_operation_cfs_subparam sp
where sp.svc_operation_cfs_param_id=
order by sp.sort
select
sp.instance_operation_cfs_param_uid::text as instance_operation_cfs_param_uid
,sp.instance_operation_cfs_subparam
,sp.note
,sp.sort
,sp.is_sensitive
from instance_operation_cfs_subparam sp
where sp.instance_operation_cfs_param_uid=
order by sp.sort
select distinct r.resource_realm, r.sort
from resource_realm r
join resource_realm_access a on
(r.resource_realm_id=a.resource_realm_id
AND (a.contract_id=
OR a.contract_id=0) /*0 means access to any contract*/
AND a.is_enabled)
join svc s on r.resource_realm_type_id=s.resource_realm_type_id
where s.svc_id=
order by r.sort, r.resource_realm
select iop.param_value
from instance_operation_cfs_param iop
join svc_operation_cfs_param sop on (iop.svc_operation_cfs_param_id=sop.svc_operation_cfs_param_id)
where iop.instance_operation_uid=
AND sop.svc_operation_cfs_param='resourceRealm'
order by 1
select properties::text
from resource_realm
where resource_realm='ngcloud.ru'
```
## v1/resources/instance_operation_cfs_param_ls.cfc
```cfml
select
iop.instance_operation_cfs_param_uid::text as instance_operation_cfs_param_uid
iop.instance_operation_uid::text as instance_operation_uid
iop.svc_operation_cfs_param_id
case when sop.is_sensitive then '********' else iop.param_value end as param_value
iop.note
to_char(iop.dt_created, 'YYYY-MM-DD"T"HH24:MI:SS.FF3TZHTZM') as dt_created
iop.creator_id
u.login as creator_login
u.shortname as creator_shortname
sop.svc_operation_cfs_param
sop.sort
sop.is_sensitive
sop.is_required
sop.is_hidden
sop.is_disabled
sop.data_type
((isArray(x) OR isEmpty(x))? x : listToArray(x))#>sop.value_list
sop.default_value
sop.func
p.state_path
p.nested_ref
p.expression
sop.depends_on_cfs_params
sop.man
null as data_descriptor
e.service_id
from instance_operation_cfs_param iop
join instance_operation io on (iop.instance_operation_uid=io.instance_operation_uid)
join instance e on (io.instance_uid=e.instance_uid)
join specification_item si on (e.specification_item_id=si.specification_item_id)
join svc_operation_cfs_param sop on (iop.svc_operation_cfs_param_id=sop.svc_operation_cfs_param_id)
left outer join usr u on (iop.creator_id=u.usr_id)
where iop.instance_operation_uid=
AND si.specification_id=
order by
--limit #maxrows#
select count(*) as cnt
from instance_operation_cfs_param iop
where iop.instance_operation_uid=
select io.dt_submit, io.dt_finish, io.submit_result
from instance_operation io
where io.instance_operation_uid=
select e.service_id, io.operation, si.specification_id
from instance_operation io
join instance e on (io.instance_uid=e.instance_uid)
left outer join specification_item si on (e.specification_item_id=si.specification_item_id)
where io.instance_operation_uid=
select so.svc_id, so.operation, sop.is_disabled
from svc_operation_cfs_param sop
join svc_operation so on (sop.svc_operation_id=so.svc_operation_id)
where sop.svc_operation_cfs_param_id=
insert into instance_operation_cfs_param (
instance_operation_cfs_param_uid,instance_operation_uid,svc_operation_cfs_param_id,param_value,note,dt_created,creator_id
) values (
,
,
,
,
,
,
);
select sop.svc_operation_cfs_param_id
,sop.svc_operation_cfs_param
,sop.value_list
,sop.data_type
,sop.is_required
,sop.maxlength
,sop.minlength
,sop.regex
,sop.unique_scope
,sop.maxvalue
,sop.minvalue
from svc_operation_cfs_param sop
where sop.svc_operation_cfs_param_id=
select count(*) as cnt
from instance_operation_cfs_param p
join instance_operation o on (p.instance_operation_uid=o.instance_operation_uid)
join instance e on (o.instance_uid=e.instance_uid)
where p.param_value=
AND p.svc_operation_cfs_param_id=/*limit to the current svc param*/
AND p.instance_operation_cfs_param_uid <> /*exclude itself*/
AND (select cast(st.instance_data->>'isDeleted' as boolean) from instance_state st where st.instance_uid=e.instance_uid order by version desc limit 1) IS NOT TRUE /*ignore deleted instances*/
select count(*) as cnt
from instance_operation_cfs_param p
join instance_operation o on (p.instance_operation_uid=o.instance_operation_uid)
join instance e on (o.instance_uid=e.instance_uid)
join specification_item i on (e.specification_item_id=i.specification_item_id)
join specification s on (i.specification_id=s.specification_id)
join contract d on (s.contract_id=d.contract_id)
join contragent k on (d.contragent_id=k.contragent_id)
join usr u on (k.contragent_id=u.contragent_id)
where p.param_value=
AND svc_operation_cfs_param_id=/*limit to the current svc param*/
AND u.usr_id=/*limit to the contragent of current user*/
AND p.instance_operation_cfs_param_uid <> /*exclude itself*/
AND (select cast(st.instance_data->>'isDeleted' as boolean) from instance_state st where st.instance_uid=e.instance_uid order by version desc limit 1) IS NOT TRUE /*ignore deleted instances*/
select sop.svc_operation_cfs_param_id
,sop.svc_operation_cfs_param
from svc_operation_cfs_param sop
where sop.svc_operation_cfs_param_id=
select c.contract_id
from instance_operation io
join instance e on (io.instance_uid=e.instance_uid)
join specification_item si on (e.specification_item_id=si.specification_item_id)
join specification s on (si.specification_id=s.specification_id)
join contract c on (s.contract_id=c.contract_id)
where io.instance_operation_uid=
select r.resource_realm_id, r.resource_realm, a.contract_id, a.is_enabled
from resource_realm r
join resource_realm_access a on (r.resource_realm_id=a.resource_realm_id)
where r.resource_realm =
AND (a.contract_id= OR a.contract_id=0)
AND a.is_enabled
```
## v1/resources/instance_operation_cfs_subparam.cfc
```cfml
select
ios.instance_operation_cfs_param_uid::text as instance_operation_cfs_param_uid
ios.instance_operation_cfs_subparam
ios.is_sensitive
ios.note
to_char(ios.dt_created, 'YYYY-MM-DD"T"HH24:MI:SS.FF3TZHTZM') as dt_created
from instance_operation_cfs_subparam ios
join instance_operation_cfs_param iop on (ios.instance_operation_cfs_param_uid=iop.instance_operation_cfs_param_uid)
join instance_operation io on (iop.instance_operation_uid=io.instance_operation_uid)
join instance e on (io.instance_uid=e.instance_uid)
join specification_item si on (e.specification_item_id=si.specification_item_id)
where ios.instance_operation_cfs_param_uid=
AND ios.instance_operation_cfs_subparam=
AND si.specification_id= /*tenant isolation, из конфиденциального тут заметки... может быть, имена переменных окружения*/
select count(*) as cnt
from instance_operation_cfs_subparam ios
where ios.instance_operation_cfs_param_uid=
AND ios.instance_operation_cfs_subparam=
select count(*) as cnt
from instance_operation_cfs_param iop
join instance_operation io on (iop.instance_operation_uid=io.instance_operation_uid)
join instance e on (io.instance_uid=e.instance_uid)
join specification_item si on (e.specification_item_id=si.specification_item_id)
where iop.instance_operation_cfs_param_uid=
AND si.specification_id=
delete from instance_operation_cfs_subparam
where instance_operation_cfs_param_uid=
AND instance_operation_cfs_subparam=
select count(*) as cnt
from instance_operation_cfs_param iop
join instance_operation io on (iop.instance_operation_uid=io.instance_operation_uid)
join instance e on (io.instance_uid=e.instance_uid)
join specification_item si on (e.specification_item_id=si.specification_item_id)
where iop.instance_operation_cfs_param_uid=
AND si.specification_id=
select count(*) as cnt
from instance_operation_cfs_subparam iop
where iop.instance_operation_cfs_param_uid=
AND iop.instance_operation_cfs_subparam=
update instance_operation_cfs_subparam set
dt_updated=
,updater_id=
,is_sensitive=
,note=
where instance_operation_cfs_param_uid=
AND instance_operation_cfs_subparam=
```
## v1/resources/instance_operation_cfs_subparam_ls.cfc
```cfml
select count(*) as cnt
from instance_operation_cfs_param iop
join instance_operation io on (iop.instance_operation_uid=io.instance_operation_uid)
join instance e on (io.instance_uid=e.instance_uid)
join specification_item si on (e.specification_item_id=si.specification_item_id)
where iop.instance_operation_cfs_param_uid=
AND si.specification_id=
select count(*) as cnt
from instance_operation_cfs_subparam ios
where ios.instance_operation_cfs_param_uid=
AND ios.instance_operation_cfs_subparam=
insert into instance_operation_cfs_subparam
(instance_operation_cfs_param_uid, instance_operation_cfs_subparam, is_sensitive, note, dt_created, creator_id, dt_updated, updater_id)
values
(
,
,
,
,
,
,
,
);
```
## v1/resources/instance_operation_default.cfc
```cfml
select
o.svc_operation_id
o.svc_id
o.operation
o.url
o.descr
o.man
from svc_operation o
where o.svc_operation_id=
select instance_data->'params' as params,
instance_data::text as instance_data
from instance_state
where instance_uid=
order by version desc
limit 1
select
p.svc_operation_cfs_param_id
p.svc_operation_cfs_param
p.label
p.data_type
null as data_descriptor
((isArray(x) OR isEmpty(x))? x : listToArray(x))#> p.value_list
>p.func
p.ref_svc_id
p.is_required
p.is_hidden
p.is_disabled
p.default_value
p.default_compute
p.regex
p.unique_scope
p.maxlength
p.minlength
p.maxvalue
p.minvalue
p.descr
p.man
p.sort
p.nested_ref
p.config::text
null as nested_ref_data
p.state_path
p.depends_on_cfs_params
p.expression
(
select 1 from svc_operation_cfs_param m
join svc_operation om on (m.svc_operation_id=om.svc_operation_id)
join svc_operation oc on (om.svc_id=oc.svc_id AND om.operation='modify' AND oc.operation='create')
join svc_operation_cfs_param c on (oc.svc_operation_id=c.svc_operation_id AND m.svc_operation_cfs_param=c.svc_operation_cfs_param)
where c.svc_operation_cfs_param_id=p.svc_operation_cfs_param_id
order by c.svc_operation_cfs_param_id
limit 1
) as is_modifiable
p.is_sensitive
from svc_operation_cfs_param p
where p.svc_operation_id=
AND p.is_actual
order by p.sort, p.svc_operation_cfs_param_id
select
sp.svc_operation_cfs_param_id
,sp.svc_operation_cfs_subparam_id
,sp.svc_operation_cfs_subparam
,sp.label
,sp.data_type
,sp.value_list
,sp.depends_on_cfs_params
,sp.expression
,sp.is_required
,sp.is_hidden
,sp.is_disabled
,sp.descr
,sp.man
,sp.default_value
,sp.minlength
,sp.maxlength
,sp.regex
,sp.sort
,sp.is_sensitive
,sp.ref_svc_id
,sp.unique_scope
,sp.default_compute
,sp.func
from svc_operation_cfs_subparam sp
where sp.svc_operation_cfs_param_id=
order by sp.sort
--->
"isModifiableDefinition":false
}, true
)
/>
```
## v1/resources/instance_operation_ls.cfc
```cfml
select
o.operation
o.instance_operation_uid::text as instance_operation_uid
o.instance_uid::text as instance_uid
to_char(o.dt_created, 'YYYY-MM-DD"T"HH24:MI:SS.FF3TZHTZM') as dt_created
to_char(o.dt_created, 'YYYY-MM-DD"T"HH24:MI:SS.FF3TZHTZM') as dt_updated
to_char(o.dt_submit, 'YYYY-MM-DD"T"HH24:MI:SS.FF3TZHTZM') as dt_submit
o.submit_result
to_char(o.dt_start, 'YYYY-MM-DD"T"HH24:MI:SS.FF3TZHTZM') as dt_start
to_char(o.dt_finish, 'YYYY-MM-DD"T"HH24:MI:SS.FF3TZHTZM') as dt_finish
extract('epoch' from coalesce(o.dt_finish,CURRENT_TIMESTAMP)- o.dt_start) as duration
o.is_successful
e.display_name
e.service_id
v.svc
o.error_log
o.note
i.specification_item_id
s.specification_id
d.contract_id
o.creator_id
o.updater_id
c.login as creator_login
c.email as creator_email
c.shortname as creator_shortname
u.login as updater_login
u.email as updater_email
u.shortname as updater_shortname
from instance_operation o
join instance e on (o.instance_uid=e.instance_uid)
left outer join specification_item i on (e.specification_item_id=i.specification_item_id)
left outer join specification s on (i.specification_id=s.specification_id)
left outer join contract d on (s.contract_id=d.contract_id)
left outer join svc v on (e.service_id=v.svc_id)
left outer join usr c on (e.creator_id=c.usr_id)
left outer join usr u on (e.updater_id=u.usr_id)
#local.fromClause#
where
s.specification_id=
order by
limit #arguments.pageSize#
offset #arguments.pageSize*(arguments.page-1)#
select count(*) as cnt
#local.fromClause#
where
s.specification_id=
select count(*) as cnt
#local.fromClause#
where
s.specification_id=
select count(*) as cnt
from svc_operation so
join svc s on so.svc_id=s.svc_id
join instance e on (s.svc_id=e.service_id)
where e.instance_uid=
AND so.operation=
select count(*) as cnt
from instance e
join specification_item si on (e.specification_item_id=si.specification_item_id)
where e.instance_uid=
AND si.specification_id=
insert into instance_operation
(instance_uid, instance_operation_uid, operation, note, dt_created, creator_id, dt_updated, updater_id)
values
(
,
,
,
,
,
,
,
);
select c.contract_id
from instance e
join specification_item si on (e.specification_item_id=si.specification_item_id)
join specification s on (si.specification_id=s.specification_id)
join contract c on (s.contract_id=c.contract_id)
where e.instance_uid=
select r.resource_realm_type_id
from resource_realm r
join resource_realm_type t on (r.resource_realm_type_id=t.resource_realm_type_id)
join svc s on (t.resource_realm_type_id=s.resource_realm_type_id)
join instance e on (s.svc_id=e.service_id)
where r.resource_realm_id=
AND e.instance_uid=
select r.resource_realm_id
from resource_realm r
join resource_realm_access a on (r.resource_realm_id=a.resource_realm_id)
where r.resource_realm_id=
AND (a.contract_id=
OR a.contract_id=0)
AND a.is_enabled
```
## v1/resources/instance_operation_run.cfc
```cfml
select count(*) as cnt
from instance_operation io
join instance e on (io.instance_uid=e.instance_uid)
join specification_item si on (e.specification_item_id=si.specification_item_id)
where io.instance_operation_uid=
AND si.specification_id=
select io.operation, s.svc_id, so.svc_operation_id
from instance_operation io
join instance e on (io.instance_uid=e.instance_uid)
join svc s on (e.service_id=s.svc_id)
join svc_operation so on (s.svc_id=so.svc_id AND io.operation=so.operation)
where io.instance_operation_uid=
select io.instance_uid
from instance_operation io
where io.instance_operation_uid=
select io.dt_submit, io.dt_finish, io.dt_start, io.submit_result, io.status_url
from instance_operation io
where io.instance_operation_uid=
select io.dt_submit, io.dt_finish, io.dt_start, io.submit_result, io.status_url
from instance_operation io
where io.instance_uid=
AND left(io.submit_result,1)='2' AND io.dt_finish IS NULL
update instance_operation
set is_successful=false, dt_finish=CURRENT_TIMESTAMP
where instance_operation_uid=
select sop.svc_operation_cfs_param_id, sop.svc_operation_cfs_param, sop.is_required,
iop.instance_operation_cfs_param_uid::text as instance_operation_cfs_param_uid, iop.param_value
from svc_operation_cfs_param sop
left outer join instance_operation_cfs_param iop on (sop.svc_operation_cfs_param_id=iop.svc_operation_cfs_param_id AND iop.instance_operation_uid=)
where sop.svc_operation_id=
select so.svc_operation_id, io.instance_uid, so.operation, r.resource_realm, io.resource_realm_id
from instance_operation io
join instance e on (io.instance_uid=e.instance_uid)
join svc_operation so on (e.service_id=so.svc_id AND io.operation=so.operation)
left outer join resource_realm r on io.resource_realm_id=r.resource_realm_id
where io.instance_operation_uid=
insert into instance_operation_param (instance_operation_uid,param,param_value)
select
iocp.instance_operation_uid
,sop.svc_operation_param
,iocp.param_value
from instance_operation_cfs_param iocp
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=
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
,sop.svc_operation_param
,sop.default_value
from svc_operation_param sop
where sop.svc_operation_id= AND length(sop.default_value)>0
ON CONFLICT (instance_operation_uid,param)
DO NOTHING;
select so.url_prefix, so.url_suffix, o.operation, svc.version
from instance_operation o
join instance i on (o.instance_uid=i.instance_uid)
join svc on (i.service_id=svc.svc_id)
left outer join svc_operation so on (i.service_id=so.svc_id AND o.operation=so.operation)
where o.instance_operation_uid=
select s.instance_data->'job'->>'jobAppVersion' as jobAppVersion
from instance_operation o
join instance_state s on (o.instance_uid=s.instance_uid)
where o.instance_operation_uid=
order by s.version desc
limit 1
select iop.param, iop.param_value
from instance_operation_param iop
where iop.instance_operation_uid=
AND length(iop.param)>0
update instance_operation
set dt_submit=
,dt_start=null, dt_finish=null, submit_result='0'
,url=
where instance_operation_uid=
update instance_operation
set submit_result=
where instance_operation_uid=
update instance_operation
set status_url=
where instance_operation_uid=
insert into instance_operation_param (instance_operation_uid,param,param_value)
values (
,
,
)
ON CONFLICT (instance_operation_uid,param)
DO UPDATE SET param_value = EXCLUDED.param_value;
select external_code
from contragent
where contragent_id=
select sop.svc_operation_cfs_param
from instance_operation io
join instance e on (io.instance_uid=e.instance_uid)
join svc_operation so on (e.service_id=so.svc_id AND io.operation=so.operation)
join svc_operation_cfs_param sop on (so.svc_operation_id=sop.svc_operation_id)
where io.instance_operation_uid=
AND LOWER(sop.svc_operation_cfs_param)=LOWER('resourceRealm')
select io.operation
from instance_operation io
where io.instance_operation_uid=
select c.contract_id
from instance_operation io
join instance e on (io.instance_uid=e.instance_uid)
join specification_item si on (e.specification_item_id=si.specification_item_id)
join specification s on (si.specification_id=s.specification_id)
join contract c on (s.contract_id=c.contract_id)
where io.instance_operation_uid=
select r.resource_realm_id, r.resource_realm, sop.svc_operation_cfs_param, iop.param_value, a.contract_id, a.is_enabled
from instance_operation_cfs_param iop
join svc_operation_cfs_param sop on (iop.svc_operation_cfs_param_id=sop.svc_operation_cfs_param_id)
join resource_realm r on (sop.svc_operation_cfs_param='resourceRealm' AND iop.param_value=r.resource_realm)
join resource_realm_access a on (r.resource_realm_id=a.resource_realm_id)
where iop.instance_operation_uid=
AND (a.contract_id= OR a.contract_id=0)
AND a.is_enabled
select count(*) as cnt
from instance_operation_param iop
where iop.param='resourceRealm' AND
iop.instance_operation_uid=
select c.contract_id
from instance_operation io
join instance e on (io.instance_uid=e.instance_uid)
join specification_item si on (e.specification_item_id=si.specification_item_id)
join specification s on (si.specification_id=s.specification_id)
join contract c on (s.contract_id=c.contract_id)
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
join resource_realm_access a on (r.resource_realm_id=a.resource_realm_id)
join instance_operation_param iop on (r.resource_realm=iop.param_value AND iop.param='resourceRealm')
where iop.instance_operation_uid=
AND (a.contract_id= OR a.contract_id=0)
AND a.is_enabled
```
## v1/resources/instance_operation_validate.cfc
```cfml
```
## v1/resources/notification_ls.cfc
```cfml
select
n.notification_uid::text as notification_uid
n.notification
n.descr
n.url
n.timeout_sec
n.contragent_id
k.external_uid
to_char(n.dt_show_from, 'YYYY-MM-DD"T"HH24:MI:SS.FF3TZHTZM') as dt_show_from
to_char(n.dt_show_to, 'YYYY-MM-DD"T"HH24:MI:SS.FF3TZHTZM') as dt_show_to
from notification n
left outer join contragent k on (n.contragent_id=k.contragent_id)
where 1=1
AND (n.dt_show_from <= CURRENT_TIMESTAMP OR n.dt_show_from IS NULL)
AND (n.dt_show_to >= CURRENT_TIMESTAMP OR n.dt_show_to IS NULL)
AND (k.external_uid = OR n.contragent_id IS NULL)
order by dt_show_from desc
limit #maxrows#
select count(*) as cnt
from notification n
left outer join contragent k on (n.contragent_id=k.contragent_id)
where 1=1
AND (n.dt_show_from <= CURRENT_TIMESTAMP OR n.dt_show_from IS NULL)
AND (n.dt_show_to >= CURRENT_TIMESTAMP OR n.dt_show_to IS NULL)
AND (k.external_uid = OR n.contragent_id IS NULL)
```
## v1/resources/param_value_list.cfc
```cfml
select p.depends_on_params
from svc_operation_cfs_param p
where p.svc_operation_cfs_param_id =
```
## v1/resources/resource_realm.cfc
```cfml
select
r.resource_realm_id
r.resource_realm_type_id
r.parent_id
r.resource_realm
r.mgmt_api_url
p.resource_realm as parent
t.resource_realm_type
r.descr
r.man
to_char(r.dt_created, 'YYYY-MM-DD"T"HH24:MI:SS.FF3TZHTZM') as dt_created
to_char(r.dt_updated, 'YYYY-MM-DD"T"HH24:MI:SS.FF3TZHTZM') as dt_updated
from resource_realm r
join resource_realm_type t on (r.resource_realm_type_id=t.resource_realm_type_id)
left outer join resource_realm p on (r.parent_id=p.resource_realm_id)
where r.resource_realm_id=
select
m.resource_realm_metric_id
m.resource_realm_type_metric_id
m.dashboard_url
t.metric
u.measure
u.measure_short
from resource_realm_metric m
join resource_realm_type_metric t on (m.resource_realm_type_metric_id=t.resource_realm_type_metric_id)
join measure u on (t.measure_id=u.measure_id)
where m.resource_realm_id=
```
## v1/resources/resource_realm_ls.cfc
```cfml
select
r.resource_realm_id
r.resource_realm_type_id
r.parent_id
r.resource_realm
r.mgmt_api_url
p.resource_realm as parent
t.resource_realm_type
r.descr
r.man
to_char(r.dt_created, 'YYYY-MM-DD"T"HH24:MI:SS.FF3TZHTZM') as dt_created
to_char(r.dt_updated, 'YYYY-MM-DD"T"HH24:MI:SS.FF3TZHTZM') as dt_updated
from resource_realm r
join resource_realm_type t on (r.resource_realm_type_id=t.resource_realm_type_id)
left outer join resource_realm p on (r.parent_id=p.resource_realm_id)
join resource_realm_access a on
(r.resource_realm_id=a.resource_realm_id
AND (a.contract_id=
OR a.contract_id=0)
AND a.is_enabled)
where 1=1
order by
limit #maxrows#
select count(*) as cnt
from resource_realm
where 1=1
```
## v1/resources/resource_realm_type_ls.cfc
```cfml
select
t.resource_realm_type_id
t.resource_realm_type
t.man
from resource_realm_type t
where 1=1
order by
limit #maxrows#
select count(*) as cnt
from resource_realm_type
where 1=1
```
## v1/resources/svc.cfc
```cfml
select
s.svc_id
s.svc
s.svc_short
s.code
s.version
s.orchestrator_name
(select url from svc_operation so where so.operation='create' AND so.svc_id=s.svc_id limit 1) as create_url
s.is_production_ready
s.resource_realm_type_id
s.icon_src
s.descr
s.man
from svc s
where svc_id=
select
j.svc_operation_id
j.operation
j.url
j.descr
j.man
from svc_operation j
where j.svc_id=
```
## v1/resources/svc_default.cfc
```cfml
```
## v1/resources/svc_grouped_ls.cfc
```cfml
code={prefix="s", type="string"},
version={prefix="s", type="string"},
descr={prefix="s", type="string"},
man={prefix="s", type="string"},
svc_group_id={prefix="sg", type="integer"},
svc_group={prefix="g", type="string"},
resource_realm_cnt={type="integer"}
}
/>
select
s.svc_id
s.svc
s.svc_short
s.code
(select url from svc_operation so where so.operation='create' AND so.svc_id=s.svc_id limit 1) as create_url
s.is_production_ready
s.resource_realm_type_id
s.sort
s.version
s.icon_src
s.descr
s.man
to_char(s.dt_created, 'YYYY-MM-DD"T"HH24:MI:SS.FF3TZHTZM') as dt_created
to_char(s.dt_updated, 'YYYY-MM-DD"T"HH24:MI:SS.FF3TZHTZM') as dt_updated
sg.svc_group_id
g.svc_group
(coalesce(s.svc,'') ||' '|| coalesce(s.svc_short,'') ||' '|| coalesce(s.synonyms,'')) as svc_extended_name
(select count(distinct r.resource_realm)
from resource_realm r
join resource_realm_access a on (
r.resource_realm_id=a.resource_realm_id
AND (a.contract_id IN (
select contract_id
from contract d
where d.contragent_id=k.contragent_id AND NOT d.is_closed
) OR a.contract_id=0) /*0 means access to any contract*/
AND a.is_enabled)
where r.resource_realm_type_id=s.resource_realm_type_id) as resource_realm_cnt
from svc s
left outer join svc_group_svc sg on (s.svc_id=sg.svc_id AND sg.is_enabled)
left outer join svc_group g on (sg.svc_group_id=g.svc_group_id)
left outer join contragent k on (
k.external_uid=
)
where 1=1
order by g.sort, g.svc_group_id
length limit--->
>
почему-то здесь работает без structCopy
```
## v1/resources/svc_ls.cfc
```cfml
"resource_realm_type_id"={prefix="sv", type="integer"},
"sort"={prefix="sv", type="integer"},
"is_production_ready"={prefix="sv", type="boolean"},
"svc"={prefix="sv", type="string"},
"svc_short"={prefix="sv", type="string"},
"svc_extended_name"={prefix="sv", type="string"},
"orchestrator_name"={prefix="sv", type="string"},
"synonyms"={prefix="sv", type="string"},
"code"={prefix="sv", type="string"},
"version"={prefix="sv", type="string"},
"descr"={prefix="sv", type="string"},
"man"={prefix="sv", type="string"},
"resource_realm_cnt"={prefix="sv", type="integer"}
}
/>
s.svc_id
s.svc
s.svc_short
s.orchestrator_name
s.synonyms
s.code
(select url from svc_operation so where so.operation='create' AND so.svc_id=s.svc_id limit 1) as create_url
s.is_production_ready
s.resource_realm_type_id
s.sort
s.version
s.icon_src
s.descr
s.man
(select count(distinct r.resource_realm)
from resource_realm r
join resource_realm_access a on (
r.resource_realm_id=a.resource_realm_id
AND (a.contract_id IN (
select contract_id
from contract d
where d.contragent_id=k.contragent_id AND NOT d.is_closed
) OR a.contract_id=0) /*0 means access to any contract*/
AND a.is_enabled)
where r.resource_realm_type_id=s.resource_realm_type_id) as resource_realm_cnt
to_char(s.dt_created, 'YYYY-MM-DD"T"HH24:MI:SS.FF3TZHTZM') as dt_created
to_char(s.dt_updated, 'YYYY-MM-DD"T"HH24:MI:SS.FF3TZHTZM') as dt_updated
(coalesce(s.svc,'') ||' '|| coalesce(s.svc_short,'') ||' '|| coalesce(s.synonyms,'')) as svc_extended_name
select #local.definedRecordFields#* from
(
select
#preserveSingleQuotes(local.definedQueryFields)#
'' as placeholder
from svc s
left outer join contragent k on (
k.external_uid=
) /*эти хитрости для того, чтобы втащить cfqueryparam внутрь cfqery*/
where 1=1
AND (
lower((coalesce(s.svc,'') ||' '|| coalesce(s.svc_short,'') ||' '|| coalesce(s.synonyms,''))) like lower()
)
) sv
where 1=1
order by
select count(*) as cnt
from svc
where 1=1
```
## v1/resources/svc_operation.cfc
```cfml
select
o.svc_operation_id
o.operation
o.url
o.descr
o.man
from svc_operation o
where o.svc_operation_id=
select
p.svc_operation_cfs_param_id
p.svc_operation_cfs_param
p.label
p.data_type
((isArray(x) OR isEmpty(x))? x : listToArray(x))#>p.value_list
p.ref_svc_id
p.is_required
p.is_hidden
p.is_disabled
p.default_value
p.default_compute
p.func
p.expression
p.state_path
p.nested_ref
p.regex
p.unique_scope
p.maxlength
p.minlength
p.maxvalue
p.minvalue
p.descr
p.man
p.sort
p.depends_on_cfs_params
(
select 1 from svc_operation_cfs_param m
join svc_operation om on (m.svc_operation_id=om.svc_operation_id)
join svc_operation oc on (om.svc_id=oc.svc_id AND om.operation='modify' AND oc.operation='create')
join svc_operation_cfs_param c on (oc.svc_operation_id=c.svc_operation_id AND m.svc_operation_cfs_param=c.svc_operation_cfs_param)
where c.svc_operation_cfs_param_id=p.svc_operation_cfs_param_id
order by c.svc_operation_cfs_param_id
limit 1
) as is_modifiable
p.is_sensitive
from svc_operation_cfs_param p
where p.svc_operation_id=
AND p.is_actual
order by p.sort, p.svc_operation_cfs_param_id
```
## v1/resources/svc_operation_cfs_param_compute.cfc
```cfml
select
sop.data_type
sop.svc_operation_cfs_param
sop.expression
from svc_operation_cfs_param sop
where sop.svc_operation_cfs_param_id
=
```
## v1/resources/svc_operation_cfs_subparam_compute.cfc
```cfml
select
sop.svc_operation_cfs_param_id
sop.data_type
sop.svc_operation_cfs_subparam
sop.expression
from svc_operation_cfs_subparam sop
where sop.svc_operation_cfs_subparam_id
=
```
## v1/resources/user.cfc
```cfml
select
s.specification_id
c.contract_id
c.contragent_id
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=
order by specification_id desc
limit 1;
select
u.usr_id
k.contragent_id
from usr u
left outer join contragent k on u.contragent_id=k.contragent_id
where u.usr_id=
```
## v1/resources/vault_record.cfc
```cfml
select
st.instance_state_uid::text as instance_state_uid
st.version
st.creator_id
to_char(st.dt_state, 'YYYY-MM-DD"T"HH24:MI:SS.FF3TZHTZM') as dt_state
st.is_test
st.instance_operation_uid::text as instance_operation_uid
st.instance_data::text as instance_data
(st.instance_data->>'isDeleted')::boolean as is_deleted
from instance_state st
join instance e on (st.instance_uid=e.instance_uid)
join specification_item i on (e.specification_item_id=i.specification_item_id)
where st.instance_uid=
AND i.specification_id=
order by st.version desc
limit 1
```