G-1: 메신저 Webhook Relay + _send_to_room 실제 httpx 호출 구현 G-2: POST /api/tasks/bulk SR 대량작업 엔드포인트 (최대 100건) G-3: 라이선스 만료 알림 스케줄러 (매일 09:00 KST) G-4: 체험판 upgrade_banner 필드 + license.py 배너 로직 G-5: core/auto_rca.py + incidents/problem auto-rca 엔드포인트 G-6: core/deploy_impact.py + vibe impact-analysis 엔드포인트 G-7: core/ticket_classifier.py + SR 생성 시 AI 분류 + ai-suggestion API G-8: VulnPatchRecord 모델 + vuln_scan 패치추적 4개 엔드포인트 G-9: core/jira_sync.py + gateway Jira/Confluence 연동 엔드포인트 G-10: core/push_notify.py + routers/push.py + PushSubscription 모델 G-11: approvals 다중승인 (위임/서명/기한초과/마감연장) G-12: alembic.ini + migrations/ + cicd/migrate_to_postgres.sh 하네스: guardia-orchestrator 확장기능 Phase 반영 봇명령어: /sr /status /license /bulk 슬래시 명령어 추가 설치스크립트: setup/ (Ubuntu, CentOS, RHEL, Windows) --test 옵션 포함 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
486 lines
13 KiB
JavaScript
486 lines
13 KiB
JavaScript
/*-------------------------------------------------------------------+
|
|
* 1. 파일명: valid.number.js
|
|
* 2. 설 명: 숫자에 대한 유효성 점검 함수를 정의한다.
|
|
* 3. 의존성: ui.js, number.js
|
|
* 4. 작성자:
|
|
* 5. 작성일: 2006.10.11.
|
|
-------------------------------------------------------------------*/
|
|
|
|
|
|
/**
|
|
* Text형 입력폼의 값이 유효한 숫자값인지 점검하여
|
|
* 유효한 숫자이면 true를, 그렇지 않으면 false를 돌려준다.
|
|
* 값이 빈 문자열이면 false를 돌려주는 것에 주의한다.
|
|
*
|
|
* @param obj Text형 입력폼 객체
|
|
*/
|
|
function checkNumberObj(obj) {
|
|
return checkNumber(obj.value);
|
|
}
|
|
|
|
|
|
/**
|
|
* 비축 업무에서는 숫자에 3자리마다 컴마가 들어간
|
|
* 수치값을 사용한다. 이를 고려한 숫자여부를 점검하여
|
|
* 유효한 숫자이면 true를, 그렇지 않으면 false를
|
|
* 돌려준다. 값이 빈 문자열이면 false를 돌려주므로
|
|
* 빈값이 아닌지를 점검하여 사용하는 것에 주의한다.
|
|
*
|
|
* @param str 검사할 문자열
|
|
*/
|
|
function checkNumber(str) {
|
|
return ! isNaN( removeChar(str, ',') );
|
|
}
|
|
|
|
|
|
/**
|
|
* 숫자의 정수 자릿수와 소수 자릿수를 검사하여 각 자릿수가
|
|
* 주어진 자리수 이하인지 검사하여, 둘 다 자릿수 이하이면 0을,
|
|
* 정수부 자릿수만 이상 있으면 1을, 소수부 자릿수만 이상있으면 2를
|
|
* 둘 모두 이상 있으면 3을 돌려 준다. 소수부의 경우 값이 넘어오지
|
|
* 않으면(undefined이면) 무조건 유효한 것으로 한다.
|
|
*
|
|
* @date 2004-01-15
|
|
* @param no 검사할 숫자
|
|
* @param intFigure 정수부 유효 자릿수
|
|
* @param floatFigure 소수부 유효 자릿수
|
|
*/
|
|
function checkNoFigureLE(no, intFigure, floatFigure) {
|
|
// 컴마를 제거하고 정수부와 소수부로 나눈다.
|
|
var no = removeChar(no, ',');
|
|
|
|
var dotIndex = no.indexOf('.');
|
|
|
|
var intPart = ""; // 정수부
|
|
var floatPart = ""; // 소수점을 포함한 소수부
|
|
|
|
if ( dotIndex == -1 ) {
|
|
intPart = no;
|
|
}
|
|
else {
|
|
intPart = no.substring(0, dotIndex);
|
|
floatPart = no.substring(dotIndex);
|
|
}
|
|
|
|
// 정수부 유효 여부
|
|
var intPartValid = intPart.length <= intFigure;
|
|
|
|
// 소수부 유효여부
|
|
var floatPartValid = floatFigure == undefined || trim(floatFigure) == "" || ( floatPart.length - 1 <= floatFigure);
|
|
|
|
//alert(no + ", " + intPart + ", " + floatPart + ", " + intPartValid + ", " + floatPartValid);
|
|
|
|
return ( intPartValid ? 0 : 1 ) + ( floatPartValid ? 0 : 2 );
|
|
}
|
|
|
|
|
|
/**
|
|
* Text형 입력폼 값의 정수 자릿수와 소수 자릿수를 검사하여 각 자릿수가
|
|
* 주어진 자리수 이하인지 검사하여, 둘 다 자릿수 이하이면 0을,
|
|
* 정수부 자릿수만 이상 있으면 1을, 소수부 자릿수만 이상있으면 2를
|
|
* 둘 모두 이상 있으면 3을 돌려 준다. 소수부의 경우 값이 넘어오지
|
|
* 않으면(undefined이면) 무조건 유효한 것으로 한다.
|
|
*
|
|
* @date 2004-01-15
|
|
* @param obj Text형 입력폼 객체
|
|
* @param intFigure 정수부 유효 자릿수
|
|
* @param floatFigure 소수부 유효 자릿수
|
|
*/
|
|
function checkNoFigureLEObj(obj, intFigure, floatFigure) {
|
|
return checkNoFigureLE(obj.value, intFigure, floatFigure);
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
* 주어진 수치값의 정수부 자릿수와 소수부 자릿수가 주어진 값보다
|
|
* 작거나 같은지 검사하여 그렇다면 true를, 그렇지 않으면 오류 메세지를
|
|
* 보여주고 false를 돌려 준다.
|
|
*
|
|
* @param no 확인할 값.
|
|
* @param fieldName 항목명. 오류 메세지를 뿌려 줄 때 사용한다.
|
|
* @param intFigure 정수부 자릿수
|
|
* @param floatFigure 소수부 자릿수. 없으면 검사하지 않는다.
|
|
*/
|
|
function validateNoFigureLE(no, fieldName, intFigure, floatFigure) {
|
|
var checkRes = checkNoFigureLE(no, intFigure, floatFigure);
|
|
|
|
if ( checkRes > 0 ) {
|
|
var msg = fieldName + "의 값은 ";
|
|
|
|
if ( floatFigure == undefined || floatFigure <= 0 ) {
|
|
/* 소수부가 없거나 혹은 0이하인 경우. */
|
|
msg += intFigure + " 자리 이하이어야 합니다."
|
|
}
|
|
else {
|
|
/* 소수부도 있는 경우. */
|
|
msg += " 정수부가 " + intFigure + "자리 이하, 소수부가 " + floatFigure + "자리 이하이어야 합니다.";
|
|
}
|
|
|
|
showMessage(msg);
|
|
}
|
|
|
|
return checkRes == 0;
|
|
}
|
|
|
|
|
|
/**
|
|
* 주어진 객체의 수치값의 정수부 자릿수와 소수부 자릿수가 주어진 값보다
|
|
* 작거나 같은지 검사하여 그렇다면 true를, 그렇지 않으면 오류 메세지를
|
|
* 보여주고 false를 돌려 준다.
|
|
*
|
|
* @param noObj 확인할 값을 가지고 있는 객체.
|
|
* @param fieldName 항목명. 오류 메세지를 뿌려 줄 때 사용한다.
|
|
* @param intFigure 정수부 자릿수
|
|
* @param floatFigure 소수부 자릿수. 없으면 검사하지 않는다.
|
|
*/
|
|
function validateNoFigureLEObj(noObj, fieldName, intFigure, floatFigure) {
|
|
var valid = validateNoFigureLE(noObj.value, fieldName, intFigure, floatFigure);
|
|
|
|
if ( ! valid ) {
|
|
noObj.focus();
|
|
}
|
|
|
|
return valid;
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
* 주어진 값이 비교 값과 같은지 비교하여
|
|
* 그렇다면 true를 그렇지 않으면 false를 돌려 준다.
|
|
*
|
|
* @param no 비교 대상 수치값. 자릿수 등이 들어간 수치형 문자열일 수도 있다.
|
|
* @param comp 비교 값. no 값을 이 값과 비교하여 같은지 확인한다.
|
|
*/
|
|
function checkNoEQ(no, comp) {
|
|
/* 값이 없으면 true를 돌려 준다. */
|
|
if ( isEmpty(no) ) return true;
|
|
|
|
if ( ! checkParamForNo(no, comp) ) return false;
|
|
|
|
/* 자릿수를 제거하고 수치형으로 변환한다. */
|
|
var noValue = parseInt(removeChar(no , ","), 10);
|
|
var compValue = parseInt(removeChar(comp, ","), 10);
|
|
|
|
return noValue == compValue
|
|
}
|
|
|
|
|
|
function checkNoEQObj(obj, comp) {
|
|
return checkNoEQ(obj.value, comp);
|
|
}
|
|
|
|
|
|
function checkParamForNo(no, comp) {
|
|
/* 비교 값이 없으면 메세지를 보여 준다. */
|
|
if ( isEmpty(comp) ) {
|
|
showMessage("파라미터인 comp 값이 넘어오지 않았습니다.");
|
|
return false;
|
|
}
|
|
|
|
/* 비교대상 값이 수치인지 확인한다. */
|
|
if ( ! checkNumber(no) ) {
|
|
showMessage("파라미터 no 의 값이 수치값이 아닙니다: " + no);
|
|
return false;
|
|
}
|
|
|
|
/* 비교 값이 수치인지 확인한다. */
|
|
if ( ! checkNumber(comp) ) {
|
|
showMessage("파라미터 comp 의 값이 수치값이 아닙니다: " + comp);
|
|
return false;
|
|
}
|
|
|
|
|
|
return true;
|
|
}
|
|
|
|
|
|
/**
|
|
* no 값이 comp 값보다 작거나 같은지 검사하여
|
|
* 그렇다면 true를 그렇지 않으면 오류 메세지를 보여주고 false를 돌려 준다.
|
|
*
|
|
* @param fieldName 검사 항목 명.
|
|
* @param no 비교 대상 수치값. 자릿수 등이 들어간 수치형 문자열일 수도 있다.
|
|
* @param comp 비교 값. no 값을 이 값과 비교하여 같은지 확인한다.
|
|
*/
|
|
function validateNoEQ(no, fieldName, comp) {
|
|
var valid = checkNoEQ(no, comp);
|
|
|
|
if ( ! valid ) {
|
|
showMessage(fieldName + " 항목의 값은 " + comp + "과 같아야 합니다.");
|
|
}
|
|
|
|
return valid;
|
|
}
|
|
|
|
|
|
/**
|
|
* noObj의 값이 comp 값보다 작거나 같은지 검사하여
|
|
* 그렇다면 true를 그렇지 않으면 오류 메세지를 보여주고 커서가 해당 항목에
|
|
* 위치하게 한 다음 false를 돌려 준다.
|
|
*
|
|
* @param fieldName 검사 항목 명.
|
|
* @param noObj 비교 대상 수치값을 가지고 있는 객체.
|
|
* @param comp 비교 값. no 값을 이 값과 비교하여 같은지 확인한다.
|
|
*/
|
|
function validateNoEQObj(noObj, fieldName, comp) {
|
|
var valid = validateNoEQ(noObj.value, fieldName, comp);
|
|
|
|
if ( ! valid ) noObj.focus();
|
|
|
|
return valid;
|
|
}
|
|
|
|
|
|
/**
|
|
* 주어진 값이 비교 값보다 작은지 비교하여
|
|
* 그렇다면 true를 그렇지 않으면 false를 돌려 준다.
|
|
*
|
|
* @param no 비교 대상 수치값. 자릿수 등이 들어간 수치형 문자열일 수도 있다.
|
|
* @param comp 비교 값. no 값을 이 값과 비교하여 같은지 확인한다.
|
|
*/
|
|
function checkNoLT(no, comp) {
|
|
/* 값이 없으면 true를 돌려 준다. */
|
|
if ( isEmpty(no) ) return true;
|
|
|
|
if ( ! checkParamForNo(no, comp) ) return false;
|
|
|
|
/* 자릿수를 제거하고 수치형으로 변환한다. */
|
|
var noValue = parseInt(removeChar(no , ","), 10);
|
|
var compValue = parseInt(removeChar(comp, ","), 10);
|
|
|
|
return noValue < compValue
|
|
}
|
|
|
|
|
|
function checkNoLTObj(obj, comp) {
|
|
return checkNoLT(obj.value, comp);
|
|
}
|
|
|
|
|
|
/**
|
|
* no 값이 comp 값보다 작거나 같은지 검사하여
|
|
* 그렇다면 true를 그렇지 않으면 오류 메세지를 보여주고 false를 돌려 준다.
|
|
*
|
|
* @param fieldName 검사 항목 명.
|
|
* @param no 비교 대상 수치값. 자릿수 등이 들어간 수치형 문자열일 수도 있다.
|
|
* @param comp 비교 값. no 값을 이 값과 비교하여 같은지 확인한다.
|
|
*/
|
|
function validateNoLT(no, fieldName, comp) {
|
|
var valid = checkNoLT(no, comp);
|
|
|
|
if ( ! valid ) {
|
|
showMessage(fieldName + " 항목의 값은 " + comp + "보다 작아야 합니다.");
|
|
}
|
|
|
|
return valid;
|
|
}
|
|
|
|
|
|
/**
|
|
* noObj의 값이 comp 값보다 작거나 같은지 검사하여
|
|
* 그렇다면 true를 그렇지 않으면 오류 메세지를 보여주고 커서가 해당 항목에
|
|
* 위치하게 한 다음 false를 돌려 준다.
|
|
*
|
|
* @param fieldName 검사 항목 명.
|
|
* @param noObj 비교 대상 수치값을 가지고 있는 객체.
|
|
* @param comp 비교 값. no 값을 이 값과 비교하여 같은지 확인한다.
|
|
*/
|
|
function validateNoLTObj(noObj, fieldName, comp) {
|
|
var valid = validateNoLT(noObj.value, fieldName, comp);
|
|
|
|
if ( ! valid ) noObj.focus();
|
|
|
|
return valid;
|
|
}
|
|
|
|
|
|
/**
|
|
* 주어진 값이 비교 값보다 작거나 같은지 비교하여
|
|
* 그렇다면 true를 그렇지 않으면 false를 돌려 준다.
|
|
*
|
|
* @param no 비교 대상 수치값. 자릿수 등이 들어간 수치형 문자열일 수도 있다.
|
|
* @param comp 비교 값. no 값을 이 값과 비교하여 같은지 확인한다.
|
|
*/
|
|
function checkNoLE(no, comp) {
|
|
/* 값이 없으면 true를 돌려 준다. */
|
|
if ( isEmpty(no) ) return true;
|
|
|
|
if ( ! checkParamForNo(no, comp) ) return false;
|
|
|
|
/* 자릿수를 제거하고 수치형으로 변환한다. */
|
|
var noValue = parseInt(removeChar(no , ","), 10);
|
|
var compValue = parseInt(removeChar(comp, ","), 10);
|
|
|
|
return noValue <= compValue
|
|
}
|
|
|
|
|
|
function checkNoLEObj(obj, comp) {
|
|
return checkNoLE(obj.value, comp);
|
|
}
|
|
|
|
|
|
/**
|
|
* no 값이 comp 값보다 작거나 같은지 검사하여
|
|
* 그렇다면 true를 그렇지 않으면 오류 메세지를 보여주고 false를 돌려 준다.
|
|
*
|
|
* @param fieldName 검사 항목 명.
|
|
* @param no 비교 대상 수치값. 자릿수 등이 들어간 수치형 문자열일 수도 있다.
|
|
* @param comp 비교 값. no 값을 이 값과 비교하여 같은지 확인한다.
|
|
*/
|
|
function validateNoLE(no, fieldName, comp) {
|
|
var valid = checkNoLE(no, comp);
|
|
|
|
if ( ! valid ) {
|
|
showMessage(fieldName + " 항목의 값은 " + comp + "보다 작거나 같아야 합니다.");
|
|
}
|
|
|
|
return valid;
|
|
}
|
|
|
|
|
|
/**
|
|
* noObj의 값이 comp 값보다 작거나 같은지 검사하여
|
|
* 그렇다면 true를 그렇지 않으면 오류 메세지를 보여주고 커서가 해당 항목에
|
|
* 위치하게 한 다음 false를 돌려 준다.
|
|
*
|
|
* @param fieldName 검사 항목 명.
|
|
* @param noObj 비교 대상 수치값을 가지고 있는 객체.
|
|
* @param comp 비교 값. no 값을 이 값과 비교하여 같은지 확인한다.
|
|
*/
|
|
function validateNoLEObj(noObj, fieldName, comp) {
|
|
var valid = validateNoLE(noObj.value, fieldName, comp);
|
|
|
|
if ( ! valid ) noObj.focus();
|
|
|
|
return valid;
|
|
}
|
|
|
|
|
|
/**
|
|
* 주어진 값이 비교 값보다 큰지 비교하여
|
|
* 그렇다면 true를 그렇지 않으면 false를 돌려 준다.
|
|
*
|
|
* @param no 비교 대상 수치값. 자릿수 등이 들어간 수치형 문자열일 수도 있다.
|
|
* @param comp 비교 값. no 값을 이 값과 비교하여 같은지 확인한다.
|
|
*/
|
|
function checkNoGT(no, comp) {
|
|
/* 값이 없으면 true를 돌려 준다. */
|
|
if ( isEmpty(no) ) return true;
|
|
|
|
if ( ! checkParamForNo(no, comp) ) return false;
|
|
|
|
/* 자릿수를 제거하고 수치형으로 변환한다. */
|
|
var noValue = parseInt(removeChar(no , ","), 10);
|
|
var compValue = parseInt(removeChar(comp, ","), 10);
|
|
|
|
return noValue > compValue;
|
|
}
|
|
|
|
|
|
function checkNoGTObj(obj, comp) {
|
|
return checkNoGT(obj.value, comp);
|
|
}
|
|
|
|
|
|
/**
|
|
* no 값이 comp 값보다 큰지 검사하여
|
|
* 그렇다면 true를 그렇지 않으면 오류 메세지를 보여주고 false를 돌려 준다.
|
|
*
|
|
* @param fieldName 검사 항목 명.
|
|
* @param no 비교 대상 수치값. 자릿수 등이 들어간 수치형 문자열일 수도 있다.
|
|
* @param comp 비교 값. no 값을 이 값과 비교하여 같은지 확인한다.
|
|
*/
|
|
function validateNoGT(no, fieldName, comp) {
|
|
var valid = checkNoGT(no, comp);
|
|
|
|
if ( ! valid ) {
|
|
showMessage(fieldName + " 항목의 값은 " + comp + "보다 커야 합니다.");
|
|
}
|
|
|
|
return valid;
|
|
}
|
|
|
|
|
|
/**
|
|
* noObj의 값이 comp 값보다 큰지 검사하여
|
|
* 그렇다면 true를 그렇지 않으면 오류 메세지를 보여주고 커서가 해당 항목에
|
|
* 위치하게 한 다음 false를 돌려 준다.
|
|
*
|
|
* @param fieldName 검사 항목 명.
|
|
* @param noObj 비교 대상 수치값을 가지고 있는 객체.
|
|
* @param comp 비교 값. no 값을 이 값과 비교하여 같은지 확인한다.
|
|
*/
|
|
function validateNoGTObj(noObj, fieldName, comp) {
|
|
var valid = validateNoGT(noObj.value, fieldName, comp);
|
|
|
|
if ( ! valid ) noObj.focus();
|
|
|
|
return valid;
|
|
}
|
|
|
|
|
|
/**
|
|
* 주어진 값이 비교 값보다 크거나 같은지 비교하여
|
|
* 그렇다면 true를 그렇지 않으면 false를 돌려 준다.
|
|
*
|
|
* @param no 비교 대상 수치값. 자릿수 등이 들어간 수치형 문자열일 수도 있다.
|
|
* @param comp 비교 값. no 값을 이 값과 비교하여 같은지 확인한다.
|
|
*/
|
|
function checkNoGE(no, comp) {
|
|
/* 값이 없으면 true를 돌려 준다. */
|
|
if ( isEmpty(no) ) return true;
|
|
|
|
if ( ! checkParamForNo(no, comp) ) return false;
|
|
|
|
/* 자릿수를 제거하고 수치형으로 변환한다. */
|
|
var noValue = parseInt(removeChar(no , ","), 10);
|
|
var compValue = parseInt(removeChar(comp, ","), 10);
|
|
|
|
return noValue >= compValue
|
|
}
|
|
|
|
|
|
function checkNoGEObj(obj, comp) {
|
|
return checkNoGE(obj.value, comp);
|
|
}
|
|
|
|
|
|
/**
|
|
* no 값이 comp 값보다 크거나 같은지 검사하여
|
|
* 그렇다면 true를 그렇지 않으면 오류 메세지를 보여주고 false를 돌려 준다.
|
|
*
|
|
* @param fieldName 검사 항목 명.
|
|
* @param no 비교 대상 수치값. 자릿수 등이 들어간 수치형 문자열일 수도 있다.
|
|
* @param comp 비교 값. no 값을 이 값과 비교하여 같은지 확인한다.
|
|
*/
|
|
function validateNoGE(no, fieldName, comp) {
|
|
var valid = checkNoGE(no, comp);
|
|
|
|
if ( ! valid ) {
|
|
showMessage(fieldName + " 항목의 값은 " + comp + "보다 크거나 같아야 합니다.");
|
|
}
|
|
|
|
return valid;
|
|
}
|
|
|
|
|
|
/**
|
|
* noObj의 값이 comp 값보다 크거나 같은지 검사하여
|
|
* 그렇다면 true를 그렇지 않으면 오류 메세지를 보여주고 커서가 해당 항목에
|
|
* 위치하게 한 다음 false를 돌려 준다.
|
|
*
|
|
* @param fieldName 검사 항목 명.
|
|
* @param noObj 비교 대상 수치값을 가지고 있는 객체.
|
|
* @param comp 비교 값. no 값을 이 값과 비교하여 같은지 확인한다.
|
|
*/
|
|
function validateNoGEObj(noObj, fieldName, comp) {
|
|
var valid = validateNoGE(noObj.value, fieldName, comp);
|
|
|
|
if ( ! valid ) noObj.focus();
|
|
|
|
return valid;
|
|
}
|