Persist sorcery contact=memory 수정 및 start.sh에서 SIP 스캐너 차단
- [res pjsip] contact=memory as sorcery.conf 앞에 Asterisk 시작; 기본적으로 sorcery-astdb SQLite는 조용히 모든 REGISTER 연락처를 삭제 - 팟 스타트에서 iptables를 통해 알려진 SIP 스캐너 87.246.54.22...
Sub-tab content fills full content-area width
Drop the centered max-width constraint (was 920 / 1200 / 680 / 720 depending on tab) on SubTabShell. The page already lives inside SettingsView's content column...
Fix attachment parsing and hasAttachment false positives
Three fixes to EmailImapService: 1. toEnvelope: narrow multipart check to multipart/mixed only — plain HTML+text emails (multipart/alternative) no longer sh...
Add download button to classic view attachment section
The classic view (MessageBrowser) had its own attachment list that was missing the download button — only the conversation view was fixed previously. Also align...
Add com.kamo.z.shared.commerce to EnableJpaRepositories scan
**************** (required by **************** in the shared library) lives under com.kamo.z.shared.commerce but was not included in the JPA repository scan, ca...
Proper layout, 패딩 및 공급자 로고
레이아웃 / 간격 수정 : - 모든 6개의 탭(Providers, Extension, Phone Users, Device, Voicemail, Health) 이제 px:{xs:2,md:3} py:3 pb:6 패딩을 사용하여 TabShell에서 콘텐츠를 감싸고 있습니다. 단추 패널의 가장...
Correct field name and type in getFromAddresses response
Backend was sending 'email' key but frontend expected 'address', and sent type 'shared_mailbox' when frontend expected 'shared'. Also fixes hasMailboxes flag wh...
Load FROM addresses from accessible mailboxes and aliases
Replaces the broken getFromAddresses() endpoint (which sent 'email' instead of 'address') with getAccessibleMailboxes() + listMemberAliases(), matching the same...
CockroachDB 호환 DROP INDEX CASCADE 구문
CockroachDB는 ALTER TABLE을 거부합니다 ... UNIQUE 제약을위한 DROP CONSTRAINT : unimplemented : UNIQUE constraint "uk org oauth provider"를 사용하지 마십시오. ALTER TABLE DROP CONST...
하락 stray VOIPService spec는 repo에서 md
프로젝트 컨벤션 당 (.md 파일은 서비스와 함께 발송하지 않습니다).
저장소 스캔에 com.kamo.z.shared.commerce 포함
최신 kamo-shared-library propagates *************** (donotmodify.dao.services)는 생성자 의존성을 가지고 있습니다. *************** *************** 더 보기 서비스는 VOIPService의 구성 요소 검사...
플랫폼 구성 탭 (일반 / VOIP & SMS / 시스템 사용자 / 고급)
기타 제품 *********** 4개의 탭을 가진 SettingsView에서: - 일반 : 읽기 전용 플랫폼 개요 - 총 orgs, 활성 전화 서버 인스턴스 수, 활성 SMS-provider 인스턴스 수, 마지막 글로벌 VOIP 동기화 타임 스탬프. 새로운에서 읽음 **********...
첨부 파일 다운로드 버튼 및 decouple Mark-as-read 추가
- 각 첨부 파일 행에 다운로드 아이콘 버튼을 추가하여 사용자가 강제할 수 있습니다. 파일 다운로드 대신에만 새 탭에서 열기 - Decouple markConversation 스레드 로드 시도 / 캐치에서 transient OTK/network 실패 거짓 실 짐으로 더 긴 표면 오류 또...
글로벌 VOIP 동기화 작업 (admin-tunable interval)
VoipGlobalSyncJob는 매 분마다 진드기에, 읽습니다 SystemConfiguration Singleton은 글로벌 동기화가 이루어져 있는지 결정합니다. - voipSyncEnabled가 false인 경우 → 건너뛰기. - LastGlobalVoipSyncAt + voipSy...
시스템 구성 + 플랫폼 오버뷰 엔드포인트
Platform-wide 구성 표면, 기존의 최고 수준의 guard (matches SystemUserConfigController의 requireTopLevelOwner 패턴). 엔드포인트: - GET /api/security/system-config — 싱글턴 행을 반환 - PUT...
Per-instance 자원 관제사 + org 집계 + 내부 sync
Per-instance 자원 CRUD (확장 / 사용자 / 장치 / 음성 메일) : - VoipExtensionsController at *********** - VoipUsersController at /api/voip/instances/{id}/users 에서 - VoipDevice...
Multi-instance provider refactor + full FreePBX + Flowroute SMS
Core model change: one org → many VoipProviderInstances (was: one per org). Every provider API call is now instance-scoped. PhoneProvider interface: - New meth...
Multi-instance 전화/SMS 공급자 이동
Hibernate ddl-auto 후 실행 : 업데이트는 새로운 테이블을 만듭니다 (VOIP PROVIDER INSTANCE, BULK TEXT PROVIDER INSTANCE, PHONE EXTENSION, PHONE END USER, PHONE DEVICE에 대한 자세한 정보 ren...
Multi-instance 전화/SMS 공급자 스키마 기초
- Rename VoipProviderConfig → VoipProviderInstance; Drop UNIQUE(org id), add 인스턴스 name, config json, last sync at, last sync error. - Rename BulkTextProviderCon...
로컬 /var/lib/pbx에 hostPath를 이동
Rclone FUSE를 통해 MinIO는 POSIX chmod 또는 symlink()를 지원하지 않습니다. FreePBX의 모듈 시스템에 의해 요구되는. 모든 FreePBX 및 MariaDB 변경 /mnt/shared-files/pbx/에서 /var/lib/pbx/로 hostPath 볼...
MinIO FUSE hostPath를 위한 PHP를 통해 포장 fwconsole/amportal
/var/lib/asterisk는 지원하지 않는 rclone FUSE를 통해 MinIO에 의해 역행됩니다 POSIX chmod, 그래서 fwconsole 스크립트는 그 볼륨에 실행할 수 없습니다. start.sh는 이제 ephemeral /usr/local/bin의 래퍼 스크립트를 생성...
PreStop 후크 및 종료GracePeriodSeconds 추가
컨테이너는 배경 Asterisk 때문에 종료에 갇혀 있었다 apache2ctl (PID 1) 종료 후 실행되는 프로세스. preStop 걸이는 보냅니다 Kubernetes가 컨테이너를 죽이기 전에 Asterisk에 SIGTERM, 깨끗한 포트 릴리즈 및 포트 사용 오류 타격에서 다음 팟...
Bootstrap.php 추가 /etc/freepbx.conf 재생
Installer는 datasource='와 require once로 freepbx.conf를 작성합니다. bootstrap.php의 경우, config.php는 FreePBX 클래스를로드하는 데 따라 다릅니다. 재생 된 버전은 모두 누락되었습니다. "Class FreePBX는 찾을 수...
재시작 /etc/freepbx.conf
/etc는 ephemeral (hostPath), 그래서 /etc/freepbx.conf에 의해 작성된 installer는 각 pod 재시작에 손실됩니다. 다른 지점을 재생 그것은 env vars 때 bootstrap.php 이미 존재, 그래서 관리자 UI 수 있습니다 MariaDB에 ...
Bypass start asterisk, 대신 제어 소켓을 기다립니다
start asterisk는 pod에 false 긍정적을 반환하는 `pidof asterisk`를 사용합니다. 다시 시작, 대기 - Asterisk 루프를 걸기 위해. 지금 start.sh 시작 Safe asterisk를 통해 직접 Asterisk ( stale 소켓 / pid 파일 삭...
배경에서 Asterisk를 시작, 그것을 기다리고, 다음 설치 프로그램을 실행
Entrypoint.sh는 FreePBX 설치 프로그램을 실행하지 않습니다 - 그것은 단지 시작 서비스. start.sh 이제 엔트리포인트 설정 단계를 복제, 시작 배경에 Asterisk는, 그것의 소켓을 준비하기 위하여 기다립니다, 그 후에 달립니다 php는 첫 번째 부팅이라면 아파치...
Entrypoint 핸들 설치, start.sh가 아닌
FreePBX installer (php install -n)는 이미 Asterisk가 필요합니다. 실행. 우리의 Startup.sh는 Asterisk가 시작되기 전에 호출되었습니다. "Asterisk와 함께 시작" 추락. 이제 start.sh 만 기다립니다 MariaDB 및 패치 Ap...
마운트 /etc/asterisk 만, /etc, PHP 간단한 XML 오류 수정
HostPath 볼륨으로 전체 /etc 설치는 PHP 확장을 손상 이미지에서 파종 후도 로딩 — simplexml load file undefined 설치 시간. 지금만 /etc/asterisk는 persisted입니다; /etc는에서 옵니다 이미지 및 PHP 설정 intact 유지. ...
과량 제거를 위해 2:1 비율에 CPU 한계를 감소시키십시오
Docs 4→1 핵심, 지브리 4→2 핵심, libretranslate 2→1 핵심, bergamot 2→1 핵심, coturn 1→0.5 핵심. 저장 ~7.5 노드 제한을 코어.
Escomputers/freepbx:17에 스위치 정확한 건축
피곤 / freepbx는 FreePBX 17 이미지가 없습니다 (2022). escomputers/freepbx:17 (4월 2026일 새롭게 한, Asterisk 21 + FreePBX 17)는 요구합니다 별도의 MariaDB 팟과 한 번 PHP 설치 단계. 변경 사항: - Free...
드롭 공공 관리자 진입; HTTP를 통해 액세스://k[12]m1:8088
Admin UI는 이제 포트 8088 (FreePBX's)에 LAN/WireGuard에 내부 전용입니다. nginx는 hostNetwork에 직접 바인딩합니다. Traefik 노선 없음, Let's Encrypt 없음 cert, PBX 자체에 필요한 공공 포트 80/443 운송.
FreePBX 17 + K1m1 및 k2m1의 Jigasi SIP 브리지 배포
FreePBX (tiredofit/freepbx:17-latest)는 hostNetwork로 실행되므로 SIP/RTP nodeSelector를 통해 실제 클라이언트 IP를 보호하고, 1per-node를 피했습니다. SIP 정보 5060 UDP/TCP (5061 TLS), Janus를 피...
이진 corruption을 방지하기 전에 파스 formData
request.text() 에 multipart/form-data corrupts 바이너리 파일 바이트; init.body로 parsed FormData를 전달하기 때문에 forwardToApi는 request.text()를 건너 뛸 수 있습니다. 정확한 경계를 가진 청결한 multip...
MinHeight 제거:100vh 두 배 scrollbars 원인
외부 상자의 minHeight:100vh는 배치의 calc (100vh - 56px)를 초과했습니다 브라우저 수준의 스크롤과 내부를 두는 컨테이너 overflow: 동시에 능동태이기 위하여 자동. 고도: 혼자 100%는 충분합니다.
드롭 편집기 페이지 헤더, 이름 일반 하위탭
- back-arrow IconButton + 방패 아이콘 + 제목 + 자막 제거 보안 모델 / 마스터 모델 편집기의 상단. 취소 버튼 sticky action bar는 이미 다시 탐색하고, 떨어지는 header는 각 모양 더 수직 방을 줍니다. - 정상적인 보안을 위해 "General...
보안 모델 테이블에서 Drop stale Pay 컬럼 헤더
Employee Self-Pay Kamo 수수료 필드가 제거되었을 때, 일치 행 몸에 TableCell은 삭제되었지만 헤더 행은 여전히 '<팀회원> 지불의 세포, 각 몸 란 1개의 구멍에 이동 머리의 왼쪽. orphaned 헤더를 제거하기 그래서 열 / 헤더 폭은 다시 라인.
GoDaddy 400 오류 뒤에 표면 실제적인 이유
GoDaddy는 이제 코드 = UNIABLE TO AUTHENTICATE와 몸으로 HTTP 400을 반환합니다. "Bad Request : Bad Request" 계정이 현재의 일치하지 않는 경우 생산 영역 API 자격 (10 + 도메인 계정 또는 활성 할인 도메인 클럽 회원). 자격은...
Censorship sub-tab 이제는 spec 당 ATF를 첫째로 만듭니다
Censorship sub-tab 카드를 요청한 순서와 일치합니다. 1. 알콜, 담배 & 소화기 2. 허용된 회원 연령 범위 3. 허용된 직원 (팀 회원) 연령 범위 다른 sub-tabs는 이미 정확한 순서 (일반: 기본 정보 / 가시성 / 누가 만들 수 / 플랫폼 설정 / Domai...
플랫폼 관리자보기, pagination, 라이브 검색, 필터, org 로고
플랫폼 관리자 (최고 수준의 org 소유자) 이제 시스템을 통해 모든 org를 참조하십시오 새로운 /api/security/org/all-networks endpoint 대신 자신의 회원. Header title and subtitle update to 반영 관리자 컨텍스트. 다른 증...
플랫폼 관리자를 위한 GET /api/security/org/all-networks 추가
Top-level org 소유자는 이제 시스템과 함께 모든 조직을 읽을 수 있습니다. Caller와 관련된 회원 정보. Orgs where the caller has a 회원 register get isOwner/memberId populated; 다른 사람은 memberId를 얻습니다...
보안 모델 편집기의 하위 탭 + 정리
- 보안 모델 편집기 ...에서 *********** 지금 분할 4개의 sub-tabs로: 일반 (기본 정보, 가시성, 누가 만들 수 있습니다, 플랫폼 설정, 도메인 구성, 상업 시장), 검열 (alcohol/ 담배 / 방화 + 회원 + 팀 회원 연령대), 허용 된 응용 프로그램, 및 ...
Drop teamMemberPayFeesDataLoader에서 설정
Master-model 프로듀서 더 이상 제거 된 tri-state pay-fees를 통과하지 마스터 보안 모델을 만들 때 설정 - 필드는 사라집니다 ChildOrgSecurityModel 과 그 서비스 과부하.
드롭 teamMemberPayFeesSetting 매개 변수
공유 라이브러리 변경 미러 - SecurityModelController, MasterModelController 및 AppliedModelController 더 이상 읽기 / 쓰기 teamMemberPayFeesSetting. 모든 상품 분기 유형 편집기의 per-model Self-...
드롭 팀MemberPayFeesSetting
직원 자체 지불 수수료 정책이 사라집니다 - BillingGroup refactor handles 보안 모델을 통해 아닌 그룹 당 청구. 제거하기 teamMemberPayFeesSetting 열에서 ChildOrgSecurityModel, 일치 ChildOrgSecurityModelDT...
FindByIdWithDomains를 통해 Eager-load 도메인, 드롭 @Transactional
@Transactional on the Controller 메소드는 DB 연결이 실행되도록 합니다. 전체 MinIO 업로드, 또한 위험 LazyInitializationException if 내부 getOrganizationById 거래가 해결하기 전에 커밋 org.getDomains(...
ApiPath에서 중복 제거?type=
forwardToApi 이미 appends incomingSearch (?type=...) 원본에서 요청 URL. Embedding ?type= 생성 된 apiPath의 두 번째 시간 ?type=full?type=full at the backend, 그래서 봄은 유형을 구부렸습니다 "f...
Int64 회원 ID에 대한 mailbox 스위처 복원
Mailboxes/member fetch를 위한 getMemberIdString를 사용하여, id/mailboxId를 정상화하십시오 EmailService에서 접근 가능한 개인의 스위처를 구동 우편함 사용할 때 JS 번호 coercion는 ID 정밀도를 스트립 할 수 없습니다.
Alias 가시 UI + Subdomain 브랜치 버튼
하위 도메인BranchesDialog: - Alias 편집기는 테이블 스타일 행 목록으로 칩 목록을 대체 alias 당 회원 및 팀 구성원 체크 박스 - 관리 제어 제작자 유형은 /network/create에 있는 각 부모 별명을 보십시오 - onUpdateModelSubdomainCo...
별명 가시 필터링 + 자동 검증 subdomain 소유권
OrganizationController: - Web-alias org 생성 이제 자동 마크 소유권Verified=true 및 isDnsVerified=true 에 생성 된 OrgDomain — 아니 TXT 레코드 필요 이후 GoDaddy에 DNS를 제공 - CUSTOM parentAl...
