diff --git a/legacy/dash-prototype/README.md b/legacy/dash-prototype/README.md
new file mode 100644
index 0000000..2db282e
--- /dev/null
+++ b/legacy/dash-prototype/README.md
@@ -0,0 +1,54 @@
+# سامانه مدیریت انبار — فرانتاند متصل به استک (FastAPI + PostgreSQL + Casdoor)
+
+معماری نهایی:
+
+```
+مرورگر (فرانت HTML — inventory-system.html / change-inventory.html)
+ │
+ ├── ورود: Casdoor (OIDC + PKCE) یا رمز آزمایشی محلی
+ │ → نقش/پروژه از پروفایل محلی (ایمیل ⇄ مدیر پروژه)
+ │
+ └── داده: هدرهای X-User-Role / X-Project-Id / X-User-Name-B64
+ → FastAPI (/api/v1) → PostgreSQL
+```
+
+## اجرا
+
+**استک (Docker):**
+```
+cd v1.2
+docker compose up -d --build
+```
+- فرانت: http://localhost:3000 (nginx — پراکسی /api به بکاند)
+- API: http://localhost:8000/docs
+- Casdoor: http://localhost:8080 (admin/123) — بعد از seed: کاربرها mousavi/goli/mohaghegh/razaei با رمز 123456
+- seed استک: `py seed_stack.py` (واحد/پروژه/برند/متریال/انبار/تراکنش نمونه)
+- seed Casdoor: `cd casdoor && py seed.py` (سازمان/اپلیکیشن OIDC/کاربران + تولید casdoor-config.js)
+
+**اجرای محلی بدون Docker برای فرانت:**
+```
+py -m http.server 8123
+```
+و `app-config.js` را با `apiBase: 'http://localhost:8000/api/v1'` بگذارید.
+
+## ساختار
+
+| فایل | نقش |
+|---|---|
+| `inventory-system.html` | داشبورد، کنترل روزانه، انبارها، سازماندهی، ورود |
+| `change-inventory.html` | صفحه تغییر موجودی (فایل مستقل — فقط «برگشت به داشبوردها») |
+| `core.js` | هویت/نشست + لایه API (fetch + هدرهای نقش) + آینه دادهها |
+| `style.css` | استایل مشترک |
+| `casdoor-config.js` | تنظیمات اتصال به Casdoor (تولیدشده توسط seed) |
+| `app-config.js` | آدرس API بکاند |
+| `callback.html` | بازگشت OIDC (تبدیل کد به توکن و نشست) |
+| `test-logic-v3.mjs` | تست (هویت + لایه API در برابر استک واقعی) → ALL_LOGIC_V3_OK |
+| `v1.2/` | استک: backend (FastAPI) + frontend (nginx) + sql + seed_stack.py + docker-compose.yml |
+| `casdoor/` | docker-compose Casdoor + PostgreSQL + seed.py |
+
+## مدل دسترسی
+
+- **ادمین**: فقطخواندنی برای موجودی؛ مدیریت ساختار (پروژه/انبار/مدیران) در «سازماندهی».
+- **مدیر پروژه**: ثبت و مشاهده فقط در انبارهای پروژه خودش (اعمال در بکاند با هدر X-Project-Id).
+- کاربران محلی (ایمیل ⇄ نقش/پروژه) در `localStorage` نگهداری میشوند؛ هویت واقعی از Casdoor.
+- رمزهای آزمایشی محلی: 10 ادمین، 1/2 مدیر پروژه برج آیتا، 3 مدیر پروژه الماس.
diff --git a/legacy/dash-prototype/app-config.js b/legacy/dash-prototype/app-config.js
new file mode 100644
index 0000000..ef59ce0
--- /dev/null
+++ b/legacy/dash-prototype/app-config.js
@@ -0,0 +1,6 @@
+// پیکربندی برنامه — آدرس API بکاند
+// - در استک Docker (nginx): '/api/v1' (پراکسی به کانتینر api)
+// - در اجرای محلی با http.server: آدرس کامل http://localhost:8000/api/v1
+window.APP_CONFIG = {
+ apiBase: 'http://localhost:8000/api/v1'
+};
diff --git a/legacy/dash-prototype/callback.html b/legacy/dash-prototype/callback.html
new file mode 100644
index 0000000..642f138
--- /dev/null
+++ b/legacy/dash-prototype/callback.html
@@ -0,0 +1,92 @@
+
+
+
+
+
+
+ورود — سامانه مدیریت انبار
+
+
+
+
+
+
+
+
+
+
سامانه مدیریت انبار
+
در حال بازگشت از حساب سازمانی…
+
+
+
+
+
+
+
+
+
سامانه مدیریت انبار
+
در حال بازگشت از حساب سازمانی…
+
+
+
+
+
diff --git a/legacy/dash-prototype/casdoor-config.js b/legacy/dash-prototype/casdoor-config.js
new file mode 100644
index 0000000..8645e46
--- /dev/null
+++ b/legacy/dash-prototype/casdoor-config.js
@@ -0,0 +1,9 @@
+// تنظیمات اتصال به Casdoor — توسط casdoor/seed.py تولید شده
+window.CASDOOR_CONFIG = {
+ serverUrl: 'http://localhost:8080',
+ clientId: 'inventory-app-client',
+ clientSecret: 'inventory-app-secret-2026',
+ organization: 'inventory',
+ appName: 'inventory-app',
+ redirectUri: 'http://localhost:8123/callback.html'
+};
diff --git a/legacy/dash-prototype/change-inventory.html b/legacy/dash-prototype/change-inventory.html
new file mode 100644
index 0000000..f6a2c82
--- /dev/null
+++ b/legacy/dash-prototype/change-inventory.html
@@ -0,0 +1,797 @@
+
+
+
+
+
+
+تغییر موجودی — سامانه مدیریت انبار
+
+
+
+
+
+
+
+
+
+
+
+
سامانه مدیریت انبار
+
برای ورود، رمز عبور خود را وارد کنید
+
رمز عبور
+
+
+
+ ورود به سامانه
+
+
یا
+
+
+ ورود با حساب سازمانی
+
+
+
+ رمزهای آزمایشی:
+ ۱ ← مدیر پروژه برج آیتا — فاز ۳ (آقای موسوی) | ۲ ← مدیر پروژه برج آیتا — فاز ۳ (آقای گلی)
+ ۳ ← مدیر پروژه مجتمع تجاری الماس (آقای محقق) | ۱۰ ← ادمین (آقای رضایی — فقط خواندنی)
+
+
+
+
+
+
+
+
+
+
+
+
سامانه مدیریت انبار
+
دادهها در پایگاه داده ذخیره میشوند
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/legacy/dash-prototype/core.js b/legacy/dash-prototype/core.js
new file mode 100644
index 0000000..65950a3
--- /dev/null
+++ b/legacy/dash-prototype/core.js
@@ -0,0 +1,582 @@
+/* ============================================================
+ core.js — بخش مشترک سامانه مدیریت انبار (نسخه متصل به API)
+ (ثابتها، هویت/نشست، لایه API، نوار بالا، توست)
+ بارگذاری مشترک در inventory-system.html و change-inventory.html
+ دادهها از بکاند (FastAPI /api/v1) خوانده میشوند.
+ ============================================================ */
+
+/* ---------- متریالها و فهرستها از API میآیند ---------- */
+var API_BASE = (typeof window!=='undefined' && window.APP_CONFIG && window.APP_CONFIG.apiBase) || '/api/v1';
+
+var CATEGORY_FA = {
+ 'mechanical-installations-pipes': 'تأسیسات مکانیکی و آبی',
+ 'electrical-equipment-supplies': 'تجهیزات و لوازم برقی',
+ 'doors-windows-glass': 'درب، پنجره و شیشه',
+ 'metals-steel-sections': 'فلزات و مقاطع فولادی',
+ 'construction-materials': 'مصالح ساختمانی',
+ 'construction-chemicals': 'مواد شیمیایی ساختمانی',
+ 'finishing-interior-decoration': 'نازککاری و دکوراسیون داخلی',
+ 'construction-tools-equipment': 'ابزار و تجهیزات کارگاهی'
+};
+
+var TX = {
+ PURCHASE: {label:'خرید', icon:'cart', color:'#16a34a', dir:'+', grp:'in'},
+ WITHDRAWAL: {label:'برداشت', icon:'minusCirc', color:'#1d4ed8', dir:'−', grp:'out'},
+ RETURN: {label:'برگشت', icon:'undo', color:'#16a34a', dir:'+', grp:'in'},
+ TRANSFER_IN: {label:'انتقال (ورودی)', icon:'in', color:'#16a34a', dir:'+', grp:'in'},
+ TRANSFER_OUT:{label:'انتقال (خروجی)', icon:'out', color:'#1d4ed8', dir:'−', grp:'out'},
+ DAMAGE: {label:'ضایعات', icon:'warn', color:'#1d4ed8', dir:'−', grp:'out'},
+ WASTE: {label:'اتلاف', icon:'trash', color:'#1d4ed8', dir:'−', grp:'out'},
+ LOSS: {label:'مفقودی', icon:'pkgX', color:'#1d4ed8', dir:'−', grp:'out'},
+ FOUND: {label:'پیدا شده', icon:'search', color:'#16a34a', dir:'+', grp:'in'},
+ STOCK_COUNT: {label:'شمارش موجودی', icon:'check', color:'#64748b', dir:'±', grp:'cnt'}
+};
+var TX_ORDER = ['PURCHASE','WITHDRAWAL','RETURN','TRANSFER_IN','TRANSFER_OUT','DAMAGE','WASTE','LOSS','FOUND','STOCK_COUNT'];
+
+var FORM_TYPES = [
+ {t:'PURCHASE', icon:'cart', dirTxt:'افزایش', cls:'in'},
+ {t:'WITHDRAWAL', icon:'minusCirc', dirTxt:'کاهش', cls:'out'},
+ {t:'RETURN', icon:'undo', dirTxt:'افزایش', cls:'in'},
+ {t:'TRANSFER', icon:'out', dirTxt:'جابهجایی', cls:'mv'},
+ {t:'DAMAGE', icon:'warn', dirTxt:'کاهش', cls:'out'},
+ {t:'WASTE', icon:'trash', dirTxt:'کاهش', cls:'out'},
+ {t:'LOSS', icon:'pkgX', dirTxt:'کاهش', cls:'out'},
+ {t:'FOUND', icon:'search', dirTxt:'افزایش', cls:'in'},
+ {t:'STOCK_COUNT', icon:'check', dirTxt:'اصلاح', cls:'cnt'}
+];
+var FORM_CLS_COLOR = {in:'#16a34a', out:'#1d4ed8', mv:'#4f46e5', cnt:'#64748b'};
+
+var ICON_PATHS = {
+ cart: ['M2.05 2.05h2l2.66 12.42a2 2 0 0 0 2 1.58h9.78a2 2 0 0 0 1.95-1.57l1.65-7.43H5.12'],
+ minusCirc: ['M12 2a10 10 0 1 0 0 20 10 10 0 0 0 0-20Z','M8 12h8'],
+ undo: ['M3 7v6h6','M21 17a9 9 0 0 0-15-6.7L3 13'],
+ in: ['M12 3v14','m6 9 6 6 6-6','M5 21h14'],
+ out: ['M12 21V7','m6 13 6-6 6 6','M5 3h14'],
+ warn: ['m21.73 18-8-14a2 2 0 0 0-3.46 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3Z','M12 9v4','M12 17h.01'],
+ trash: ['M3 6h18','M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6','M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2'],
+ pkgX: ['M21 8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16Z','M3.3 7 12 12l8.7-5','M12 22V12','M15 3h4a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2h-4','m10 17 5-5-5-5','M15 12H3'],
+ search: ['m21 21-4.34-4.34','M11 19a8 8 0 1 0 0-16 8 8 0 0 0 0 16Z'],
+ check: ['M20 6 9 17l-5-5'],
+ box: ['M21 8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16Z','M3.3 7 12 12l8.7-5','M12 22V12'],
+ warehouse: ['M22 8.35V20a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V8.35A2 2 0 0 1 3.26 6.5l8-3.2a2 2 0 0 1 1.48 0l8 3.2A2 2 0 0 1 22 8.35Z','M6 18h12','M6 14h12','M6 10h12'],
+ plus: ['M12 5v14','M5 12h14'],
+ pencil: ['M17 3a2.85 2.83 0 1 1 4 4L7.5 20.5 2 22l1.5-5.5Z'],
+ x: ['M18 6 6 18','m6 6 12 12'],
+ chev: ['m9 18 6-6-6-6'],
+ user: ['M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2','M12 3a4 4 0 1 0 0 8 4 4 0 0 0 0-8Z'],
+ note: ['M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8Z','M14 2v6h6','M16 13H8','M16 17H8','M10 9H8'],
+ lock: ['M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10Z','M12 8v4','M12 16h.01'],
+ sort: ['M11 5h10','M11 9h7','M11 13h4','m3 17 3 3 3-3','M6 18V4'],
+ tag: ['M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z','M7 7h.01'],
+ clock: ['M12 22a10 10 0 1 0 0-20 10 10 0 0 0 0 20Z','M12 6v6l4 2'],
+ building: ['M6 22V4a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v18Z','M6 12H4a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2h2','M18 9h2a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2h-2','M10 6h4','M10 10h4','M10 14h4','M10 18h4'],
+ info: ['M12 22a10 10 0 1 0 0-20 10 10 0 0 0 0 20Z','M12 16v-4','M12 8h.01'],
+ history: ['M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8','M3 3v5h5','M12 7v5l4 2'],
+ calendar: ['M8 2v4','M16 2v4','M3 10h18','M5 4h14a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2Z'],
+ logout: ['M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4','m16 17 5-5-5-5','M21 12H9']
+};
+
+function icon(name, cls){
+ var paths=(ICON_PATHS[name]||ICON_PATHS.box).map(function(d){
+ return ' ';
+ }).join('');
+ return ''+paths+' ';
+}
+function datalist(id,vals){
+ return ''+vals.map(function(v){return '';}).join('')+' ';
+}
+
+/* ============================================================
+ ابزار
+ ============================================================ */
+
+function esc(s){
+ return String(s==null?'':s).replace(/&/g,'&').replace(//g,'>').replace(/"/g,'"').replace(/'/g,''');
+}
+function fa(n){ return Number(n).toLocaleString('fa-IR',{maximumFractionDigits:4}); }
+function faInt(n){ return String(n).replace(/\d/g,function(d){return '۰۱۲۳۴۵۶۷۸۹'[d];}); }
+function toEnNum(s){
+ if(typeof s!=='string') s=String(s);
+ return s.replace(/[۰-۹]/g,function(d){return '۰۱۲۳۴۵۶۷۸۹'.indexOf(d);})
+ .replace(/[٠-٩]/g,function(d){return '٠١٢٣٤٥٦٧٨٩'.indexOf(d);})
+ .replace(/[،,]/g,'');
+}
+function parseNum(s){
+ var v=Number(toEnNum(s));
+ return isFinite(v)?v:NaN;
+}
+function fmtDate(iso){
+ try{return new Intl.DateTimeFormat('fa-IR',{year:'numeric',month:'2-digit',day:'2-digit'}).format(new Date(iso));}
+ catch(e){return iso;}
+}
+function fmtDateLong(iso){
+ try{return new Intl.DateTimeFormat('fa-IR',{dateStyle:'full'}).format(new Date(iso));}
+ catch(e){return fmtDate(iso);}
+}
+function fmtTime(iso){
+ try{return new Intl.DateTimeFormat('fa-IR',{timeStyle:'short'}).format(new Date(iso));}
+ catch(e){return '';}
+}
+function fmtDateTime(iso){
+ try{return new Intl.DateTimeFormat('fa-IR',{dateStyle:'medium',timeStyle:'short'}).format(new Date(iso));}
+ catch(e){return iso;}
+}
+function toLocalInput(d){
+ var x=new Date(d); x.setMinutes(x.getMinutes()-x.getTimezoneOffset());
+ return x.toISOString().slice(0,16);
+}
+function gregKey(d){
+ var y=d.getFullYear(),m=d.getMonth()+1,dd=d.getDate();
+ return y+'-'+(m<10?'0':'')+m+'-'+(dd<10?'0':'')+dd;
+}
+function todayKey(){ return gregKey(new Date()); }
+function specsHash(specs){
+ var keys=Object.keys(specs||{}).filter(function(k){return specs[k]!==''&&specs[k]!=null;}).sort();
+ var s=keys.map(function(k){return k+'='+specs[k];}).join('|');
+ if(!s) return '';
+ var h=5381,i;
+ for(i=0;i>>0; }
+ return 'h'+h.toString(16);
+}
+function specsText(specs){
+ var keys=Object.keys(specs||{}).filter(function(k){return specs[k]!==''&&specs[k]!=null;});
+ if(!keys.length) return '—';
+ return keys.map(function(k){return k+' : '+specs[k];}).join(' · ');
+}
+function specsChips(specs){
+ var keys=Object.keys(specs||{}).filter(function(k){return specs[k]!==''&&specs[k]!=null;});
+ if(!keys.length) return '';
+ return keys.map(function(k){return ''+esc(k)+' : '+esc(specs[k])+' ';}).join('');
+}
+function hexBg(hex,alpha){
+ var r=parseInt(hex.slice(1,3),16),g=parseInt(hex.slice(3,5),16),b=parseInt(hex.slice(5,7),16);
+ return 'rgba('+r+','+g+','+b+','+alpha+')';
+}
+function keyOf(wh,m,b,sh){ return wh+'|'+m+'|'+(b||'')+'|'+sh; }
+function recById(id){
+ if(!id) return null;
+ for(var i=0;i'+esc(msg)+'';
+ document.getElementById('toasts').appendChild(el);
+ setTimeout(function(){ el.classList.add('hide'); setTimeout(function(){el.remove();},350); },4000);
+}
+
+/* ============================================================
+ login / logout
+ ============================================================ */
+
+function doLogin(){
+ var pw=document.getElementById('login-pass').value.trim();
+ var u=state.users.find(function(x){return x.pw===pw;});
+ if(!u){
+ document.getElementById('login-err').textContent='رمز عبور اشتباه است.';
+ return;
+ }
+ session={pw:pw};
+ saveSession();
+ ui.form=emptyForm('PURCHASE');
+ document.getElementById('login').classList.add('hidden');
+ document.getElementById('app').classList.remove('hidden');
+ toast('خوش آمدید، '+u.name+' ✓','ok');
+ loadAll().then(function(ok){ renderChrome(); renderPage(); });
+}
+function logout(){
+ session=null;
+ try{ localStorage.removeItem(SESSION_KEY); }catch(e){}
+ document.getElementById('app').classList.add('hidden');
+ document.getElementById('login').classList.remove('hidden');
+ document.getElementById('login-pass').value='';
+ document.getElementById('login-err').textContent='';
+}
+
+/* ============================================================
+ ورود با حساب سازمانی (Casdoor — OIDC Authorization Code + PKCE)
+ ============================================================ */
+
+function casdoorConfig(){ return (typeof window!=='undefined'&&window.CASDOOR_CONFIG)||null; }
+
+function b64urlFromBytes(bytes){
+ var s='';
+ for(var i=0;i'+icon(it.ic,'')+esc(it.label)+'';
+ return ''+icon(it.ic,'')+esc(it.label)+' ';
+ }).join('');
+ var backBtn=document.getElementById('back-btn');
+ if(backBtn){
+ backBtn.style.display=ui.history.length?'inline-flex':'none';
+ backBtn.title=ui.history.length?'بازگشت به '+esc(viewName(ui.history[ui.history.length-1])):'';
+ }
+ /* دکمه «تغییر موجودی» گوشه بالا-چپ — فقط برای مدیران پروژه (ادمین فقطخواندنی) */
+ var chLink=document.getElementById('change-link');
+ if(chLink) chLink.style.display=isAdmin()?'none':'inline-flex';
+}
+
+function renderSession(){
+ var u=user();
+ if(!u){ return; }
+ var html='';
+ html+=''+icon('user','')+esc(u.name)+' — '+esc(u.label)+'
';
+ if(session&&session.mode==='casdoor'){
+ html+=''+icon('lock','')+'حساب سازمانی (Casdoor) ';
+ }
+ if(u.role==='admin'){
+ html+=''+icon('building','')+'پروژه: '
+ +''
+ +'همه پروژهها '
+ +state.projects.map(function(p){return ''+esc(p.name)+' ';}).join('')
+ +'
';
+ html+=''+icon('lock','')+' فقط خواندنی — امکان ثبت و ویرایش وجود ندارد
';
+ }else{
+ html+=''
+ +icon('building','')+esc(projName(u.projectId))+' — مدیر پروژه
';
+ }
+ html+=''+icon('logout','')+'خروج ';
+ document.getElementById('sessionbar').innerHTML=html;
+}
+
+function renderChrome(){
+ renderNav();
+ renderSession();
+}
+function renderPage(){
+ if(typeof renderAll==='function') renderAll();
+ else if(typeof renderChange==='function') renderChange();
+}
+
+function onAdminProjectChange(v){
+ ui.adminProject=v;
+ ui.filters={category:'',warehouse:'',material:''};
+ ui.expandedId=null; ui.selTx=null;
+ renderChrome();
+ renderPage();
+}
+
+/* ============================================================
+ UI state
+ ============================================================ */
+
+function emptyForm(type){
+ return {
+ type:type||'PURCHASE',
+ whId:'',
+ matTxt:'', brandTxt:'', unitTxt:'',
+ specsRows:[{rid:1,label:'',value:''}], specSeq:2,
+ qty:'', note:'', dateInput:toLocalInput(new Date()),
+ selMatId:'', matTxt:'',
+ rows:[],
+ fromId:'', toId:''
+ };
+}
+
+var ui={
+ view:'dashboard',
+ adminProject:'',
+ filters:{category:'',warehouse:'',material:''},
+ sort:'',
+ expandedId:null, selTx:null,
+ form:emptyForm('PURCHASE'),
+ cal:{anchor:new Date(), sel:todayKey(), actRec:null},
+ history:[],
+ whEditId:null, whEditName:'', whEditDesc:'',
+ whNewName:'', whNewDesc:'', whNewProj:'',
+ newUserName:'', newUserPw:'', newUserProj:'', newUserEmail:'',
+ pmEditId:null, pmEditName:'', pmEditPw:'', pmEditProj:'', pmEditEmail:''
+};
+
+/* ============================================================
+ scope (انبارها/پروژههای قابل مشاهده)
+ ============================================================ */
+
+function scopedWarehouses(){
+ var u=user();
+ if(!u) return [];
+ if(u.role==='admin'){
+ var pid=ui.adminProject;
+ return pid?state.warehouses.filter(function(w){return w.project_id===pid;}):state.warehouses.slice();
+ }
+ return state.warehouses.filter(function(w){return String(w.project_id)===String(u.projectId);});
+}
+function scopedProjects(){
+ var u=user();
+ if(!u) return [];
+ if(u.role==='admin'){
+ return ui.adminProject?[ui.adminProject]:state.projects.map(function(p){return p.id;});
+ }
+ return u.projectId?[u.projectId]:[];
+}
diff --git a/legacy/dash-prototype/inventory-system.html b/legacy/dash-prototype/inventory-system.html
new file mode 100644
index 0000000..146bc18
--- /dev/null
+++ b/legacy/dash-prototype/inventory-system.html
@@ -0,0 +1,909 @@
+
+
+
+
+
+
+سامانه مدیریت انبار
+
+
+
+
+
+
+
+
+
+
+
+
سامانه مدیریت انبار
+
برای ورود، رمز عبور خود را وارد کنید
+
رمز عبور
+
+
+
+ ورود به سامانه
+
+
یا
+
+
+ ورود با حساب سازمانی
+
+
+
+ رمزهای آزمایشی:
+ ۱ ← مدیر پروژه برج آیتا — فاز ۳ (آقای موسوی) | ۲ ← مدیر پروژه برج آیتا — فاز ۳ (آقای گلی)
+ ۳ ← مدیر پروژه مجتمع تجاری الماس (آقای محقق) | ۱۰ ← ادمین (آقای رضایی — فقط خواندنی)
+
+
+
+
+
+
+
+
+
+
+
سامانه مدیریت انبار
+
دادهها در پایگاه داده ذخیره میشوند
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/legacy/dash-prototype/serve.py b/legacy/dash-prototype/serve.py
new file mode 100644
index 0000000..a3f4c72
--- /dev/null
+++ b/legacy/dash-prototype/serve.py
@@ -0,0 +1,19 @@
+# -*- coding: utf-8 -*-
+"""سرور استاتیک محلی بدون کش (جایگزین py -m http.server)
+اجرا: py serve.py
+"""
+import http.server
+import socketserver
+
+PORT = 8123
+
+
+class NoCacheHandler(http.server.SimpleHTTPRequestHandler):
+ def end_headers(self):
+ self.send_header('Cache-Control', 'no-store')
+ super().end_headers()
+
+
+with socketserver.TCPServer(('', PORT), NoCacheHandler) as httpd:
+ print('Serving on http://localhost:%d (no-cache)' % PORT)
+ httpd.serve_forever()
diff --git a/legacy/dash-prototype/style.css b/legacy/dash-prototype/style.css
new file mode 100644
index 0000000..ebb2dfd
--- /dev/null
+++ b/legacy/dash-prototype/style.css
@@ -0,0 +1,685 @@
+:root{
+ --bg:#f3f5f9; --panel:#ffffff; --ink:#0f172a; --muted:#64748b; --line:#e5e9f0;
+ --accent:#4f46e5; --accent-dark:#4338ca; --accent-bg:#eef2ff;
+ --green:#16a34a; --green-bg:#dcfce7;
+ --blue:#1d4ed8; --blue-bg:#dbeafe;
+ --indigo:#4f46e5; --indigo-bg:#e0e7ff;
+ --red:#dc2626; --red-bg:#fee2e2;
+ --orange:#c2410c; --orange-bg:#ffedd5;
+ --slate:#64748b; --slate-bg:#f1f5f9;
+}
+*{box-sizing:border-box; margin:0; padding:0;}
+html{font-size:14px;}
+body{
+ font-family:'Vazirmatn',Tahoma,'Segoe UI',sans-serif;
+ background:var(--bg); color:var(--ink);
+ min-height:100vh; line-height:1.7;
+ -webkit-font-smoothing:antialiased;
+}
+button{font-family:inherit; cursor:pointer;}
+input,select,textarea{font-family:inherit; font-size:13px; color:var(--ink);}
+svg{width:16px; height:16px; flex:none;} /* اندازه پیشفرض همه آیکونها */
+.hidden{display:none !important;}
+
+/* ---------- login ---------- */
+#login{
+ position:fixed; inset:0; background:linear-gradient(160deg,#eef2ff 0%,#f3f5f9 55%,#e0e7ff 100%);
+ display:flex; align-items:center; justify-content:center; padding:20px; z-index:200;
+}
+.login-card{
+ background:#fff; border:1px solid var(--line); border-radius:16px;
+ padding:34px 30px 28px; width:min(420px,94vw); text-align:center;
+ box-shadow:0 20px 50px rgba(15,23,42,.12);
+}
+.login-logo{
+ width:60px; height:60px; margin:0 auto 12px; border-radius:16px; background:var(--accent);
+ color:#fff; display:flex; align-items:center; justify-content:center;
+}
+.login-logo svg{width:30px; height:30px;}
+.login-card h1{font-size:18px; font-weight:800; margin-bottom:4px;}
+.login-card .sub{font-size:12px; color:var(--muted); margin-bottom:20px;}
+.login-card label{display:block; text-align:right; font-size:12px; font-weight:700; color:var(--muted); margin-bottom:6px;}
+.login-card input{
+ width:100%; border:1px solid var(--line); border-radius:10px; padding:11px 14px;
+ font-size:14px; outline:none; text-align:center; letter-spacing:2px; direction:ltr;
+ transition:all .15s;
+}
+.login-card input:focus{border-color:var(--accent); box-shadow:0 0 0 3px var(--accent-bg);}
+.login-btn{
+ width:100%; margin-top:14px; background:var(--accent); color:#fff; border:none;
+ font-size:14px; font-weight:700; padding:11px; border-radius:10px;
+ display:flex; align-items:center; justify-content:center; gap:8px;
+}
+.login-btn:hover{background:var(--accent-dark);}
+.login-btn svg{width:16px; height:16px;}
+.login-divider{
+ display:flex; align-items:center; gap:10px; margin-top:14px;
+ color:var(--muted); font-size:11px; font-weight:600;
+}
+.login-divider::before,.login-divider::after{content:""; flex:1; height:1px; background:var(--line);}
+.casdoor-btn{
+ background:#0ea5e9; box-shadow:0 2px 8px rgba(14,165,233,.3);
+}
+.casdoor-btn:hover{background:#0284c7 !important;}
+.login-err{color:var(--red); font-size:12px; font-weight:600; margin-top:10px; min-height:18px;}
+.demo-hint{
+ margin-top:18px; padding:10px 12px; background:#f8fafc; border:1px dashed #cbd5e1;
+ border-radius:10px; font-size:11px; color:var(--muted); text-align:right; line-height:2;
+}
+.demo-hint b{color:var(--ink);}
+
+/* ---------- top bar ---------- */
+.topbar{
+ background:var(--panel); border-bottom:1px solid var(--line);
+ padding:0 22px; display:flex; align-items:center; gap:20px; flex-wrap:wrap;
+ position:sticky; top:0; z-index:50;
+}
+.brand{display:flex; align-items:center; gap:12px; padding:10px 0;}
+.brand .logo{
+ width:38px; height:38px; border-radius:10px; background:var(--accent); color:#fff;
+ display:flex; align-items:center; justify-content:center;
+}
+.brand .logo svg{width:20px; height:20px;}
+.brand h1{font-size:16px; font-weight:800;}
+.brand .sub{font-size:11px; color:var(--muted);}
+.nav{display:flex; gap:6px; margin-inline-start:auto; flex-wrap:wrap;}
+.nav-btn{
+ display:flex; align-items:center; gap:7px; border:1px solid var(--line);
+ background:var(--panel); color:var(--ink); padding:7px 14px; border-radius:9px;
+ font-size:13px; font-weight:500; transition:all .15s;
+}
+.nav-btn:hover{border-color:#c7d2fe; background:var(--accent-bg);}
+.nav-btn.active{background:var(--accent); border-color:var(--accent); color:#fff;}
+.nav-btn svg{width:16px; height:16px;}
+.top-actions{margin-inline-start:auto;}
+.ghost-btn{
+ display:inline-flex; align-items:center; gap:6px; border:1px dashed #cbd5e1;
+ background:transparent; color:var(--muted); padding:6px 12px; border-radius:8px; font-size:12px;
+}
+.ghost-btn:hover{color:var(--red); border-color:#fca5a5; background:#fff5f5;}
+.ghost-btn svg{width:14px; height:14px;}
+
+/* دکمه «تغییر موجودی» گوشه بالا-چپ صفحه اصلی */
+.change-link{
+ display:inline-flex; align-items:center; gap:7px; text-decoration:none;
+ background:var(--accent); color:#fff; border:1px solid var(--accent);
+ border-radius:10px; padding:7px 14px; font-size:12.5px; font-weight:700;
+ transition:all .15s;
+}
+.change-link:hover{background:var(--accent-dark); border-color:var(--accent-dark); transform:translateY(-1px); box-shadow:0 3px 8px rgba(79,70,229,.25);}
+.change-link svg{width:14px; height:14px;}
+
+/* دکمه «برگشت به داشبوردها» صفحه تغییر موجودی */
+.change-back{
+ display:inline-flex; align-items:center; gap:7px; text-decoration:none;
+ background:#fff; color:var(--ink); border:1px solid var(--line);
+ border-radius:10px; padding:7px 14px; font-size:12.5px; font-weight:700;
+ transition:all .15s;
+}
+.change-back:hover{border-color:var(--accent); color:var(--accent-dark); background:var(--accent-bg);}
+.change-back svg{width:14px; height:14px;}
+
+/* ---------- session bar ---------- */
+.sessionbar{
+ background:var(--panel); border-bottom:1px solid var(--line);
+ padding:9px 22px; display:flex; align-items:center; gap:14px; flex-wrap:wrap;
+}
+.sb-field{display:flex; align-items:center; gap:7px; font-size:12px; color:var(--muted);}
+.sb-field svg{width:14px; height:14px;}
+.sb-field label{font-weight:600; white-space:nowrap;}
+.sb-field select{
+ border:1px solid var(--line); border-radius:8px; background:#fff;
+ padding:6px 10px; font-size:12.5px; min-width:130px; outline:none;
+}
+.sb-field select:focus{border-color:var(--accent); box-shadow:0 0 0 3px var(--accent-bg);}
+.user-chip{
+ display:inline-flex; align-items:center; gap:8px; background:var(--accent-bg);
+ color:var(--accent-dark); border:1px solid #c7d2fe; font-size:12px; font-weight:700;
+ padding:5px 14px; border-radius:999px;
+}
+.idp-chip{
+ display:inline-flex; align-items:center; gap:6px; background:#e0f2fe;
+ color:#0369a1; border:1px solid #bae6fd; font-size:11px; font-weight:700;
+ padding:4px 12px; border-radius:999px;
+}
+.idp-chip svg{width:12px; height:12px;}
+.user-chip svg{width:13px; height:13px;}
+.readonly-chip{
+ display:inline-flex; align-items:center; gap:6px; background:#fff7ed;
+ color:var(--orange); border:1px solid #fed7aa; font-size:12px; font-weight:600;
+ padding:5px 12px; border-radius:999px;
+}
+.readonly-chip svg{width:13px; height:13px;}
+.logout-btn{
+ margin-inline-start:auto; display:inline-flex; align-items:center; gap:6px;
+ border:1px solid var(--line); background:#fff; color:var(--red);
+ font-size:12px; font-weight:600; padding:6px 14px; border-radius:8px;
+}
+.logout-btn:hover{background:var(--red-bg); border-color:#fca5a5;}
+.logout-btn svg{width:13px; height:13px;}
+
+/* ---------- layout ---------- */
+main{max-width:1280px; margin:0 auto; padding:20px 22px 60px;}
+.card{background:var(--panel); border:1px solid var(--line); border-radius:12px; overflow:hidden;}
+.card-head{
+ padding:13px 18px; border-bottom:1px solid var(--line);
+ display:flex; align-items:center; gap:12px; flex-wrap:wrap;
+}
+.card-head h2{font-size:15px; font-weight:700; display:flex; align-items:center; gap:8px;}
+.card-head h2 svg{width:17px; height:17px; color:var(--accent);}
+.card-body{padding:16px 18px;}
+
+/* ---------- dashboard filters ---------- */
+.filterbar{display:flex; align-items:flex-end; gap:10px; flex-wrap:wrap; margin-bottom:14px;}
+.fb-field{display:flex; flex-direction:column; gap:4px;}
+.fb-field label{font-size:11.5px; font-weight:600; color:var(--muted);}
+.fb-field select{
+ border:1px solid var(--line); border-radius:9px; background:#fff;
+ padding:8px 12px; min-width:170px; outline:none; font-size:13px;
+}
+.fb-field select:focus{border-color:var(--accent); box-shadow:0 0 0 3px var(--accent-bg);}
+.fb-field select:disabled{background:#f8fafc; color:#94a3b8; cursor:not-allowed;}
+/* باکس تایپی متریال — دقیقاً همشکل باکسهای انتخاب و دکمه مرتبسازی */
+.fb-field input[list], #filt-mat-input{
+ border:1px solid var(--line); border-radius:9px; background:#fff;
+ padding:8px 12px; min-width:170px; outline:none; font-size:13px;
+}
+.fb-field input[list]:focus, #filt-mat-input:focus{border-color:var(--accent); box-shadow:0 0 0 3px var(--accent-bg);}
+.sort-btn{
+ display:inline-flex; align-items:center; gap:7px; border:1px solid var(--line);
+ background:#fff; padding:8px 14px; border-radius:9px; font-size:12.5px; font-weight:500;
+ color:var(--ink); transition:all .15s;
+}
+.sort-btn:hover{border-color:#c7d2fe; background:var(--accent-bg);}
+.sort-btn.active{background:var(--accent); color:#fff; border-color:var(--accent);}
+.sort-btn svg{width:15px; height:15px;}
+.clear-btn{
+ border:none; background:transparent; color:var(--red); font-size:12px; font-weight:600;
+ padding:8px 6px; display:inline-flex; align-items:center; gap:5px;
+}
+.clear-btn:hover{text-decoration:underline;}
+.clear-btn svg{width:13px; height:13px;}
+.count-chip{
+ margin-inline-start:auto; background:var(--slate-bg); color:var(--muted);
+ font-size:12px; font-weight:600; padding:6px 14px; border-radius:999px;
+}
+
+/* ---------- inventory table ---------- */
+.tbl-wrap{overflow-x:auto;}
+table.inv{width:100%; border-collapse:collapse; min-width:900px;}
+table.inv th{
+ font-size:12px; font-weight:700; color:var(--muted); text-align:right;
+ padding:10px 14px; background:#f8fafc; border-bottom:1px solid var(--line); white-space:nowrap;
+}
+table.inv td{padding:11px 14px; border-bottom:1px solid var(--line); font-size:13px; vertical-align:middle;}
+table.inv tr.data-row{cursor:pointer; transition:background .12s;}
+table.inv tr.data-row:hover{background:#f8faff;}
+table.inv tr.data-row.expanded{background:var(--accent-bg);}
+table.inv tr.data-row.expanded td{border-bottom-color:#c7d2fe;}
+tr.tl-row td{background:#fbfcfe; padding:14px 18px; border-bottom:1px solid var(--line);}
+.mat-cell{font-weight:700;}
+.spec-chip{
+ display:inline-block; background:var(--slate-bg); border:1px solid var(--line);
+ color:var(--ink); font-size:10.5px; padding:1px 8px; border-radius:5px; margin-inline-start:4px; font-weight:500;
+}
+.caret{width:18px; height:18px; color:#94a3b8; transition:transform .15s;}
+tr.expanded .caret{transform:rotate(90deg); color:var(--accent);}
+.qty-cell{font-weight:800; font-size:14px; white-space:nowrap;}
+.unit-cell{color:var(--muted); font-size:12px;}
+.date-cell{color:var(--muted); font-size:12px; white-space:nowrap;}
+.wh-cell small{display:block; font-size:10.5px; color:var(--muted);}
+.row-ico{width:16px; height:16px; color:#94a3b8;}
+.empty-box{padding:34px; text-align:center; color:var(--muted); font-size:13px;}
+
+/* ---------- timeline ---------- */
+.tl-head{display:flex; align-items:center; gap:10px; flex-wrap:wrap; margin-bottom:8px;}
+.tl-title{font-size:13px; font-weight:700; display:flex; align-items:center; gap:7px;}
+.tl-title svg{width:15px; height:15px; color:var(--accent);}
+.tl-hint{font-size:11px; color:var(--muted);}
+.tl-track{
+ display:flex; gap:24px; overflow-x:auto; padding:12px 4px 14px;
+ direction:rtl; align-items:stretch;
+}
+.tl-box{
+ position:relative; min-width:118px; max-width:118px; flex:0 0 auto;
+ background:#fff; border:2px solid var(--line); border-radius:0;
+ padding:8px 10px 9px; cursor:pointer; transition:all .12s; text-align:center;
+}
+.tl-box::before{
+ content:""; position:absolute; top:-2px; right:-2px; left:-2px; height:3px;
+ background:var(--boxc,#94a3b8);
+}
+.tl-box::after{
+ content:"←"; position:absolute; left:-23px; top:50%; transform:translateY(-50%);
+ color:#94a3b8; font-size:13px; font-weight:700; width:16px; text-align:center;
+}
+.tl-box:last-child::after{content:none;}
+.tl-box:hover{transform:translateY(-3px); box-shadow:0 6px 14px rgba(15,23,42,.12);}
+.tl-box.sel{border-color:var(--boxc,#94a3b8); box-shadow:0 0 0 3px rgba(79,70,229,.18);}
+.tl-ico{width:20px; height:20px; margin:0 auto 4px; color:var(--boxc,#64748b);}
+.tl-type{font-size:11px; font-weight:700; color:var(--ink); white-space:nowrap;}
+.tl-qty{font-size:13px; font-weight:800; margin-top:1px; white-space:nowrap; direction:ltr; color:var(--boxc,#0f172a);}
+.tl-bal{font-size:11px; font-weight:700; margin-top:3px; white-space:nowrap; color:var(--ink);}
+.tl-bal b{color:var(--accent-dark,#4338ca);}
+.tl-scroll-hint{font-size:10.5px; color:#94a3b8; text-align:left; margin-top:-6px;}
+.brand-break{display:flex; gap:8px; flex-wrap:wrap; margin:2px 0 10px;}
+.brand-btn{
+ display:inline-flex; align-items:center; gap:5px; border:1px solid var(--line);
+ background:#fff; border-radius:9px; padding:6px 12px; font-size:12px; color:var(--ink);
+ cursor:pointer; transition:all .12s;
+}
+.brand-btn:hover{border-color:#c7d2fe; background:var(--accent-bg);}
+.brand-btn b{font-weight:800; color:var(--accent-dark,#4338ca);}
+.brand-btn.act{background:var(--accent); border-color:var(--accent); color:#fff;}
+.brand-btn.act b{color:#fff;}
+.brand-btn .b-close{font-size:10px; opacity:.85;}
+.tl-sub{
+ display:flex; align-items:center; gap:6px; font-size:11.5px; font-weight:700; color:var(--muted);
+ margin:8px 0 2px;
+}
+.tl-sub svg{width:13px; height:13px;}
+.tl-sub b{color:var(--ink);}
+
+/* ---------- tx detail (جمعوجور — فقط اطلاعات جدید) ---------- */
+.txdetail-min{
+ background:#fff; border:1px solid var(--line); border-right:3px solid var(--boxc,#64748b);
+ border-radius:8px; padding:9px 14px; margin-top:6px;
+ display:flex; align-items:center; gap:8px 22px; flex-wrap:wrap; font-size:12px;
+}
+.txdetail-min .d-min{display:inline-flex; align-items:baseline; gap:6px;}
+.txdetail-min .d-min .k{color:var(--muted); font-size:11px;}
+.txdetail-min .d-min b{font-weight:600; color:var(--ink);}
+.diff-row{
+ display:flex; align-items:center; gap:10px; margin-top:12px; padding-top:10px;
+ border-top:1px dashed var(--line); flex-wrap:wrap;
+}
+.diff-pill{display:inline-flex; align-items:center; gap:6px; font-size:12px; font-weight:700; padding:4px 12px; border-radius:6px;}
+.diff-pill.up{background:var(--green-bg); color:var(--green);}
+.diff-pill.down{background:var(--blue-bg); color:var(--blue);}
+.diff-pill.same{background:var(--slate-bg); color:var(--muted);}
+
+/* ---------- change-inventory page (تغییر موجودی) ---------- */
+.txp-layout{display:grid; grid-template-columns:240px 1fr; gap:16px; align-items:start;}
+@media (max-width:860px){.txp-layout{grid-template-columns:1fr;}}
+.tx-types{
+ background:#fff; border:1px solid var(--line); border-radius:14px; padding:10px;
+ display:flex; flex-direction:column; gap:6px;
+ position:sticky; top:14px; box-shadow:0 1px 2px rgba(15,23,42,.04);
+}
+.tx-types h3{
+ font-size:11.5px; font-weight:800; color:var(--muted); padding:6px 12px 4px;
+ display:flex; align-items:center; gap:7px;
+}
+.tx-types h3 svg{width:13px; height:13px;}
+.tx-type-btn{
+ position:relative; display:flex; align-items:center; gap:10px;
+ border:1px solid var(--line); background:#fff; border-radius:10px;
+ padding:10px 12px; font-size:12.5px; font-weight:600; color:var(--ink);
+ transition:all .15s; text-align:right; width:100%;
+}
+.tx-type-btn svg{width:16px; height:16px; color:var(--tc,#64748b); transition:color .15s;}
+.tx-type-btn .dir{
+ font-size:9.5px; font-weight:800; margin-inline-start:auto;
+ background:var(--tc-bg,#f1f5f9); color:var(--tc,#64748b);
+ border-radius:999px; padding:2px 9px; letter-spacing:.3px; white-space:nowrap;
+}
+.tx-type-btn:hover{border-color:var(--tc,#94a3b8); background:var(--tc-bg,#f8fafc); transform:translateY(-1px);}
+.tx-type-btn.active{
+ background:#fff; border-color:var(--tc,#4f46e5);
+ box-shadow:0 0 0 1px var(--tc,#4f46e5), 0 4px 10px rgba(79,70,229,.12);
+}
+.tx-type-btn.active::before{
+ content:""; position:absolute; inset-inline-start:-1px; top:9px; bottom:9px; width:3px;
+ border-radius:3px; background:var(--tc,#4f46e5);
+}
+.tx-type-btn.active svg{color:var(--tc,#4f46e5);}
+.tx-type-btn.active .dir{background:var(--tc,#4f46e5); color:#fff;}
+.tx-form-card{
+ background:#fff; border:1px solid var(--line); border-radius:14px;
+ padding:20px 22px; box-shadow:0 1px 2px rgba(15,23,42,.04);
+}
+.tx-form-card h2{
+ font-size:15.5px; font-weight:800; display:flex; align-items:center; gap:10px;
+ padding-bottom:13px; border-bottom:1px solid var(--line); margin-bottom:6px;
+}
+.tx-form-card h2 svg{
+ width:16px; height:16px; color:var(--tc,#4f46e5);
+ background:var(--tc-bg,#eef2ff); padding:6px; border-radius:9px;
+ box-sizing:content-box;
+}
+.tx-desc{font-size:12px; color:var(--muted); margin-bottom:18px; line-height:1.9;}
+.f-grid{display:grid; grid-template-columns:1fr 1fr; gap:14px 22px;}
+@media (max-width:760px){.f-grid{grid-template-columns:1fr;}}
+.f-grid .f-row{margin-bottom:0;}
+.f-row{margin-bottom:14px;}
+.f-row label{
+ display:flex; align-items:center; gap:5px; flex-wrap:wrap;
+ font-size:12px; font-weight:700; color:var(--ink); margin-bottom:6px;
+}
+.f-row label .req{color:var(--red);}
+.f-row label .lbl-hint{font-size:10.5px; color:var(--muted); font-weight:500;}
+.f-row select,.f-row input[type=text],.f-row input[type=number],.f-row input[type=datetime-local],.f-row textarea{
+ width:100%; border:1px solid var(--line); border-radius:10px; padding:9px 13px;
+ outline:none; background:#fff; font-size:13px; color:var(--ink);
+ transition:border-color .15s, box-shadow .15s;
+}
+.f-row select:focus,.f-row input:focus,.f-row textarea:focus{
+ border-color:var(--accent); box-shadow:0 0 0 3px var(--accent-bg);
+}
+.f-row textarea{min-height:72px; resize:vertical; line-height:1.8;}
+.f-row input.ltr{direction:ltr; text-align:left;}
+.f-help{font-size:11px; color:var(--muted); margin-top:4px; line-height:1.7;}
+.f-help.warn{color:var(--red); font-weight:600;}
+.f-help.ok{color:var(--green); font-weight:600;}
+.fromto{display:grid; grid-template-columns:1fr 1fr; gap:10px; margin-bottom:2px;}
+.fromto .box{
+ border:1px solid var(--line); border-radius:12px; padding:12px 14px; background:#fbfcfe;
+ transition:border-color .15s, box-shadow .15s;
+}
+.fromto .box:focus-within{border-color:var(--accent); box-shadow:0 0 0 3px var(--accent-bg);}
+.fromto .box .lbl{font-size:11px; font-weight:800; color:var(--tc,#4f46e5); margin-bottom:7px; display:flex; align-items:center; gap:6px;}
+.fromto .box .lbl svg{width:13px; height:13px;}
+.fromto .box select{
+ width:100%; border:1px solid var(--line); border-radius:9px; padding:8px 11px;
+ font-size:13px; outline:none; background:#fff; transition:border-color .15s;
+}
+.fromto .box select:focus{border-color:var(--accent); box-shadow:0 0 0 3px var(--accent-bg);}
+.spec-box{
+ border:1px solid var(--line); border-radius:12px; background:#fbfcfe;
+ padding:13px 13px 11px; margin-top:2px;
+}
+.spec-rows{margin-bottom:10px;}
+.spec-row{display:flex; gap:8px; margin-bottom:8px; align-items:center;}
+.spec-row input{
+ border:1px solid var(--line); border-radius:9px; padding:8px 12px; font-size:13px;
+ outline:none; background:#fff; transition:border-color .15s, box-shadow .15s;
+}
+.spec-row input:focus{border-color:var(--accent); box-shadow:0 0 0 3px var(--accent-bg);}
+.spec-row input.k{flex:0 0 30%;}
+.spec-row input.v{flex:1;}
+.spec-del{
+ flex:none; width:32px; height:32px; border-radius:9px; border:1px solid var(--line);
+ background:#fff; color:var(--red); display:flex; align-items:center; justify-content:center;
+ transition:all .15s;
+}
+.spec-del:hover{background:var(--red-bg); border-color:#fca5a5;}
+.spec-del svg{width:13px; height:13px;}
+.add-spec{
+ display:inline-flex; align-items:center; gap:6px; border:1.5px dashed var(--accent);
+ color:var(--accent-dark); background:var(--accent-bg); font-size:12px; font-weight:700;
+ padding:7px 14px; border-radius:9px; transition:all .15s;
+}
+.add-spec:hover{background:#e0e7ff; border-style:solid;}
+.add-spec svg{width:13px; height:13px;}
+.pcat-wrap{margin-top:14px;}
+.pcat-wrap .f-row{margin-bottom:0;}
+
+/* ---------- records table (list ops) ---------- */
+.rows-tbl{
+ width:100%; border-collapse:separate; border-spacing:0;
+ border:1px solid var(--line); border-radius:12px; overflow:hidden;
+}
+.rows-tbl th{
+ font-size:11.5px; font-weight:800; color:var(--muted); text-align:right;
+ padding:10px 12px; background:#f8fafc; border-bottom:1px solid var(--line); white-space:nowrap;
+}
+.rows-tbl td{padding:10px 12px; border-bottom:1px solid var(--line); font-size:12.5px; vertical-align:middle;}
+.rows-tbl tbody tr:last-child td{border-bottom:none;}
+.rows-tbl tbody tr:hover{background:#f8faff;}
+.rows-tbl td .cur{font-weight:800;}
+.rows-tbl input.qty{
+ width:92px; border:1px solid var(--line); border-radius:8px; padding:6px 10px;
+ font-size:12.5px; direction:ltr; text-align:center; outline:none; background:#fff;
+ transition:border-color .15s, box-shadow .15s;
+}
+.rows-tbl input.qty:focus{border-color:var(--accent); box-shadow:0 0 0 3px var(--accent-bg);}
+.rows-tbl input.note{
+ width:100%; min-width:130px; border:1px solid var(--line); border-radius:8px;
+ padding:6px 10px; font-size:12px; outline:none; background:#fff;
+ transition:border-color .15s, box-shadow .15s;
+}
+.rows-tbl input.note:focus{border-color:var(--accent); box-shadow:0 0 0 3px var(--accent-bg);}
+.diff-live{font-size:11.5px; font-weight:800; white-space:nowrap;}
+.diff-live.up{color:var(--green);}
+.diff-live.down{color:var(--blue);}
+.diff-live.same{color:var(--muted);}
+.rows-empty{padding:30px 20px; text-align:center; color:var(--muted); font-size:12.5px; line-height:1.9;}
+.hint-box{
+ background:#f8fafc; border:1px solid var(--line); border-radius:10px;
+ padding:10px 13px; font-size:12px; color:var(--muted); margin-bottom:14px;
+ display:flex; align-items:flex-start; gap:8px; line-height:1.8;
+}
+.hint-box b{color:var(--ink);}
+.hint-box.alert{background:#fff5f5; border-color:#fecaca; color:var(--red);}
+.hint-box.alert b{color:var(--red);}
+.hint-box svg{width:14px; height:14px; flex:none; margin-top:4px;}
+.submit-bar{
+ margin-top:18px; display:flex; align-items:center; gap:12px; flex-wrap:wrap;
+ background:#f8fafc; border:1px solid var(--line); border-radius:12px; padding:12px 16px;
+}
+.submit-bar .actor{font-size:12px; color:var(--muted); display:flex; align-items:center; gap:7px;}
+.submit-bar .actor svg{width:14px; height:14px;}
+.submit-bar .actor b{color:var(--ink); font-weight:700;}
+.submit-btn{
+ margin-inline-start:auto; background:var(--tc,#4f46e5); color:#fff; border:none; font-size:13.5px;
+ font-weight:700; padding:11px 28px; border-radius:10px; display:flex; align-items:center; gap:8px;
+ box-shadow:0 2px 8px rgba(79,70,229,.25);
+ transition:opacity .15s, transform .15s, box-shadow .15s;
+}
+.submit-btn:hover{opacity:.92; transform:translateY(-1px);}
+.submit-btn:disabled{background:#cbd5e1; cursor:not-allowed; box-shadow:none; transform:none;}
+.submit-btn svg{width:16px; height:16px;}
+.readonly-block{
+ max-width:520px; margin:60px auto; background:#fff; border:1px solid var(--line);
+ border-radius:14px; padding:34px; text-align:center;
+}
+.readonly-block .big-ico{
+ width:52px; height:52px; margin:0 auto 14px; color:#f59e0b; background:#fffbeb;
+ border:1px solid #fde68a; border-radius:14px; display:flex; align-items:center; justify-content:center;
+}
+.readonly-block .big-ico svg{width:26px; height:26px;}
+.readonly-block h3{font-size:16px; font-weight:800; margin-bottom:6px;}
+.readonly-block p{font-size:13px; color:var(--muted);}
+
+/* ---------- calendar (کنترل روزانه) ---------- */
+.cal-layout{display:grid; grid-template-columns:390px 1fr; gap:16px; align-items:start;}
+@media (max-width:960px){.cal-layout{grid-template-columns:1fr;}}
+.cal-card{background:#fff; border:1px solid var(--line); border-radius:12px; padding:16px;}
+.cal-head{display:flex; align-items:center; justify-content:space-between; margin-bottom:12px;}
+.cal-head .month{font-size:14.5px; font-weight:800; display:flex; align-items:center; gap:8px;}
+.cal-head .month svg{width:16px; height:16px; color:var(--accent);}
+.cal-nav{display:flex; gap:6px; direction:ltr;}
+.cal-nav button{
+ width:30px; height:30px; border-radius:8px; border:1px solid var(--line); background:#fff;
+ color:var(--ink); display:flex; align-items:center; justify-content:center; font-size:15px; font-weight:700;
+}
+.cal-nav button:hover{border-color:#c7d2fe; background:var(--accent-bg);}
+.cal-grid{display:grid; grid-template-columns:repeat(7,1fr); gap:4px;}
+.cal-dow{font-size:11px; font-weight:700; color:var(--muted); text-align:center; padding:4px 0;}
+.day-cell{
+ position:relative; aspect-ratio:1/1.15; border:1px solid var(--line); border-radius:8px;
+ background:#fff; font-size:12.5px; font-weight:600; color:var(--ink);
+ display:flex; flex-direction:column; align-items:center; justify-content:center; gap:2px;
+ transition:all .12s; min-height:52px;
+}
+.day-cell:hover{border-color:#c7d2fe; background:var(--accent-bg);}
+.day-cell.out{color:#cbd5e1; background:#fafbfd;}
+.day-cell.today{border-color:var(--accent); box-shadow:0 0 0 2px var(--accent-bg);}
+.day-cell.sel{background:var(--accent); border-color:var(--accent); color:#fff;}
+.day-cell.sel .d-dot{background:#fff; color:var(--accent);}
+.d-dot{
+ min-width:17px; height:17px; padding:0 4px; border-radius:999px; background:var(--green);
+ color:#fff; font-size:9.5px; font-weight:800; display:flex; align-items:center; justify-content:center;
+}
+.day-cell.out .d-dot{opacity:.4;}
+.day-panel{background:#fff; border:1px solid var(--line); border-radius:12px; overflow:hidden;}
+.day-panel .dp-head{
+ padding:13px 18px; border-bottom:1px solid var(--line);
+ display:flex; align-items:center; gap:12px; flex-wrap:wrap;
+}
+.day-panel .dp-head h2{font-size:14.5px; font-weight:800; display:flex; align-items:center; gap:8px;}
+.day-panel .dp-head h2 svg{width:16px; height:16px; color:var(--accent);}
+.dp-chips{display:flex; gap:8px; margin-inline-start:auto; flex-wrap:wrap;}
+.dp-chip{font-size:11px; font-weight:700; padding:4px 12px; border-radius:999px;}
+.dp-chip.in{background:var(--green-bg); color:var(--green);}
+.dp-chip.out{background:var(--blue-bg); color:var(--blue);}
+.dp-list{max-height:560px; overflow-y:auto;}
+.dp-item{border-bottom:1px solid var(--line); font-size:12.5px;}
+.dp-item.act{background:#f8faff;}
+.dp-hit{
+ display:flex; align-items:center; gap:12px; padding:11px 18px; width:100%;
+ background:none; border:none; text-align:right; color:inherit; font:inherit; cursor:pointer;
+}
+.dp-hit:hover{background:#f8faff;}
+.dp-item .badge{
+ flex:none; width:34px; height:34px; border-radius:9px; display:flex; align-items:center; justify-content:center;
+}
+.dp-item .badge svg{width:16px; height:16px;}
+.dp-item .main{flex:1; min-width:0;}
+.dp-item .main .t{font-weight:700;}
+.dp-item .main .s{font-size:11px; color:var(--muted); margin-top:1px;}
+.dp-item .qty{font-weight:800; white-space:nowrap;}
+.dp-item .qty.in{color:var(--green);}
+.dp-item .qty.out{color:var(--blue);}
+.dp-item .time{color:var(--muted); font-size:11px; white-space:nowrap;}
+.dp-actions{display:flex; gap:8px; padding:0 18px 12px;}
+.dp-actions button{
+ flex:1; display:inline-flex; align-items:center; justify-content:center; gap:6px;
+ border:1px solid var(--line); border-radius:8px; padding:8px 10px; font-size:12px; font-weight:700;
+ background:#fff; cursor:pointer;
+}
+.dp-actions button:hover{opacity:.85;}
+.dp-actions button svg{width:13px; height:13px;}
+.dp-actions .act-ret{color:var(--green); border-color:#bbf7d0; background:var(--green-bg);}
+.dp-actions .act-out{color:var(--blue); border-color:#bfdbfe; background:var(--blue-bg);}
+.dp-actions-noact{padding:0 18px 12px; font-size:11px; color:var(--muted);}
+.dp-hint{padding:9px 18px; font-size:11.5px; color:var(--muted); background:#fbfcfe; border-bottom:1px solid var(--line);}
+
+/* ---------- warehouses ---------- */
+.wh-add{margin-bottom:14px;}
+.wh-add h3{font-size:13.5px; font-weight:700; display:flex; align-items:center; gap:7px; margin-bottom:10px;}
+.wh-add h3 svg{width:15px; height:15px; color:var(--accent);}
+.wh-add-row{display:flex; gap:10px; flex-wrap:wrap; align-items:center;}
+.wh-add-row input,.wh-add-row select{
+ border:1px solid var(--line); border-radius:9px; background:#fff; padding:8px 12px;
+ outline:none; font-size:13px; min-width:180px;
+}
+.wh-add-row input:focus,.wh-add-row select:focus{border-color:var(--accent); box-shadow:0 0 0 3px var(--accent-bg);}
+
+/* ---------- org view (سازماندهی) ---------- */
+.org-grid{display:grid; grid-template-columns:repeat(auto-fill,minmax(360px,1fr)); gap:16px;}
+@media (max-width:900px){.org-grid{grid-template-columns:1fr;}}
+.org-card{
+ background:#fff; border:1px solid var(--line); border-radius:14px; overflow:hidden;
+ box-shadow:0 1px 2px rgba(15,23,42,.04);
+}
+.org-head{
+ display:flex; align-items:center; gap:9px; padding:14px 16px;
+ background:linear-gradient(180deg,#f8faff,#fff); border-bottom:1px solid var(--line);
+}
+.org-head svg{width:17px; height:17px; color:var(--accent);}
+.org-head h3{font-size:14px; font-weight:800; flex:1;}
+.org-badge{
+ font-size:10.5px; font-weight:700; color:var(--accent-dark);
+ background:var(--accent-bg); border:1px solid #e0e7ff;
+ border-radius:999px; padding:3px 10px; white-space:nowrap;
+}
+.org-sec{padding:13px 16px 15px; border-bottom:1px solid var(--line);}
+.org-sec:last-child{border-bottom:none;}
+.org-sec h4{
+ font-size:11.5px; font-weight:800; color:var(--muted); margin-bottom:9px;
+ display:flex; align-items:center; gap:6px;
+}
+.org-sec h4 svg{width:13px; height:13px;}
+.org-chip{
+ display:flex; align-items:center; gap:8px; border:1px solid var(--line);
+ border-radius:10px; padding:7px 11px; margin-bottom:7px; background:#fbfcfe;
+}
+.org-chip svg{width:14px; height:14px; color:var(--green);}
+.org-chip .nm{font-weight:700; font-size:12.5px;}
+.org-chip .pw{font-size:10.5px; color:var(--muted); background:#fff; border:1px solid var(--line);
+ border-radius:6px; padding:1px 7px;}
+.org-chip.org-edit{flex-wrap:wrap; background:#fff;}
+.org-chip.org-edit input{
+ flex:1; min-width:110px; border:1px solid var(--line); border-radius:8px;
+ padding:6px 10px; font-size:12px; outline:none; background:#fff;
+}
+.org-chip.org-edit input:focus{border-color:var(--accent); box-shadow:0 0 0 3px var(--accent-bg);}
+.org-chip.org-edit select{
+ border:1px solid var(--line); border-radius:8px; padding:5px 8px; font-size:11.5px;
+ outline:none; background:#fff;
+}
+.org-chip.org-edit select:focus{border-color:var(--accent); box-shadow:0 0 0 3px var(--accent-bg);}
+.org-del{
+ margin-inline-start:auto; width:26px; height:26px; border-radius:8px; border:1px solid var(--line);
+ background:#fff; color:var(--red); display:flex; align-items:center; justify-content:center;
+ transition:all .15s;
+}
+.org-del:hover{background:var(--red-bg); border-color:#fca5a5;}
+.org-del svg{width:12px; height:12px;}
+.org-wh{
+ display:flex; align-items:center; gap:10px; border:1px solid var(--line);
+ border-radius:10px; padding:8px 11px; margin-bottom:7px; background:#fbfcfe;
+}
+.org-wh .info{flex:1; min-width:0;}
+.org-wh .info b{font-size:12.5px; display:block;}
+.org-wh .info small{font-size:10.5px; color:var(--muted); display:block; overflow:hidden;
+ text-overflow:ellipsis; white-space:nowrap;}
+.org-wh select{
+ border:1px solid var(--line); border-radius:8px; padding:5px 8px; font-size:11.5px;
+ outline:none; background:#fff; max-width:170px;
+}
+.org-wh select:focus{border-color:var(--accent); box-shadow:0 0 0 3px var(--accent-bg);}
+.org-none{font-size:11.5px; color:var(--muted); background:var(--slate-bg); border-radius:8px;
+ padding:8px 12px; margin-bottom:7px;}
+.org-add{display:flex; gap:8px; flex-wrap:wrap;}
+.org-add input{
+ flex:1; min-width:120px; border:1px solid var(--line); border-radius:9px;
+ padding:7px 11px; font-size:12.5px; outline:none; background:#fff;
+}
+.org-add input:focus{border-color:var(--accent); box-shadow:0 0 0 3px var(--accent-bg);}
+.wh-grid{display:grid; grid-template-columns:repeat(auto-fill,minmax(280px,1fr)); gap:14px;}
+.wh-card{background:#fff; border:1px solid var(--line); border-radius:12px; padding:16px;}
+.wh-card h3{font-size:14px; font-weight:700; display:flex; align-items:center; gap:8px; margin-bottom:4px;}
+.wh-card h3 svg{width:16px; height:16px; color:var(--accent);}
+.wh-card .desc{font-size:12px; color:var(--muted); min-height:20px;}
+.wh-meta{display:flex; gap:14px; flex-wrap:wrap; margin-top:10px; font-size:11.5px; color:var(--muted);}
+.wh-meta b{color:var(--ink);}
+.wh-actions{display:flex; gap:8px; margin-top:12px; padding-top:12px; border-top:1px solid var(--line);}
+.wh-actions button{
+ display:inline-flex; align-items:center; gap:5px; font-size:12px; font-weight:600;
+ border:1px solid var(--line); background:#fff; border-radius:8px; padding:5px 12px; color:var(--ink);
+}
+.wh-actions button:hover{border-color:#c7d2fe; background:var(--accent-bg);}
+.wh-actions button svg{width:13px; height:13px;}
+.wh-edit{border-top:1px dashed var(--line); margin-top:12px; padding-top:12px;}
+.wh-edit input{
+ width:100%; border:1px solid var(--line); border-radius:9px; padding:7px 12px; font-size:12.5px;
+ margin-bottom:8px; outline:none;
+}
+.wh-edit input:focus{border-color:var(--accent); box-shadow:0 0 0 3px var(--accent-bg);}
+.mini-btn{
+ border:1px solid var(--accent); background:var(--accent); color:#fff; font-size:12px; font-weight:600;
+ padding:7px 14px; border-radius:8px; white-space:nowrap;
+ display:inline-flex; align-items:center; gap:6px;
+}
+.mini-btn:hover{background:var(--accent-dark);}
+.mini-btn svg{width:13px; height:13px;}
+
+/* ---------- toast ---------- */
+#toasts{position:fixed; top:14px; left:50%; transform:translateX(-50%); z-index:999; display:flex; flex-direction:column; gap:8px; width:min(92vw,430px);}
+.toast{
+ background:#0f172a; color:#fff; font-size:12.5px; font-weight:500; border-radius:10px;
+ padding:11px 16px; display:flex; align-items:center; gap:9px;
+ box-shadow:0 10px 26px rgba(15,23,42,.28); animation:tin .25s ease;
+}
+.toast svg{width:15px; height:15px; flex:none;}
+.toast.ok svg{color:#4ade80;}
+.toast.err{background:#7f1d1d;}
+.toast.err svg{color:#fca5a5;}
+.toast.info svg{color:#93c5fd;}
+.toast.hide{opacity:0; transition:opacity .3s;}
+@keyframes tin{from{opacity:0; transform:translateY(-8px);} to{opacity:1; transform:translateY(0);}}
+.footer-note{margin-top:22px; text-align:center; font-size:11px; color:#94a3b8;}
+/* nav buttons as links */
+a.nav-btn{display:inline-flex; text-decoration:none;}
diff --git a/legacy/dash-prototype/swagger.json b/legacy/dash-prototype/swagger.json
new file mode 100644
index 0000000..c130700
--- /dev/null
+++ b/legacy/dash-prototype/swagger.json
@@ -0,0 +1,10555 @@
+{
+ "swagger": "2.0",
+ "info": {
+ "title": "Casdoor RESTful API",
+ "description": "Swagger Docs of Casdoor Backend API",
+ "version": "1.503.0",
+ "contact": {
+ "email": "casbin@googlegroups.com"
+ }
+ },
+ "basePath": "/",
+ "schemes": [
+ "https",
+ "http"
+ ],
+ "paths": {
+ "/.well-known/jwks": {
+ "get": {
+ "tags": [
+ "OIDC API"
+ ],
+ "operationId": "RootController.GetJwks",
+ "responses": {
+ "200": {
+ "description": "",
+ "schema": {
+ "$ref": "#/definitions/jose.JSONWebKey"
+ }
+ }
+ }
+ }
+ },
+ "/.well-known/openid-configuration": {
+ "get": {
+ "tags": [
+ "OIDC API"
+ ],
+ "description": "Get Oidc Discovery",
+ "operationId": "RootController.GetOidcDiscovery",
+ "responses": {
+ "200": {
+ "description": "",
+ "schema": {
+ "$ref": "#/definitions/object.OidcDiscovery"
+ }
+ }
+ }
+ }
+ },
+ "/.well-known/webfinger": {
+ "get": {
+ "tags": [
+ "OIDC API"
+ ],
+ "operationId": "RootController.GetWebFinger",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "resource",
+ "description": "resource",
+ "required": true,
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "",
+ "schema": {
+ "$ref": "#/definitions/object.WebFinger"
+ }
+ }
+ }
+ }
+ },
+ "/.well-known/{application}/jwks": {
+ "get": {
+ "tags": [
+ "OIDC API"
+ ],
+ "operationId": "RootController.GetJwksByApplication",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "application",
+ "description": "application name",
+ "required": true,
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "",
+ "schema": {
+ "$ref": "#/definitions/jose.JSONWebKey"
+ }
+ }
+ }
+ }
+ },
+ "/.well-known/{application}/openid-configuration": {
+ "get": {
+ "tags": [
+ "OIDC API"
+ ],
+ "description": "Get Oidc Discovery for specific application",
+ "operationId": "RootController.GetOidcDiscoveryByApplication",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "application",
+ "description": "application name",
+ "required": true,
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "",
+ "schema": {
+ "$ref": "#/definitions/object.OidcDiscovery"
+ }
+ }
+ }
+ }
+ },
+ "/.well-known/{application}/webfinger": {
+ "get": {
+ "tags": [
+ "OIDC API"
+ ],
+ "operationId": "RootController.GetWebFingerByApplication",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "application",
+ "description": "application name",
+ "required": true,
+ "type": "string"
+ },
+ {
+ "in": "query",
+ "name": "resource",
+ "description": "resource",
+ "required": true,
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "",
+ "schema": {
+ "$ref": "#/definitions/object.WebFinger"
+ }
+ }
+ }
+ }
+ },
+ "/api/Callback": {
+ "post": {
+ "tags": [
+ "Callback API"
+ ],
+ "description": "Get Login Error Counts",
+ "operationId": "ApiController.Callback",
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/object.Userinfo"
+ }
+ }
+ }
+ }
+ },
+ "/api/add-adapter": {
+ "post": {
+ "tags": [
+ "Adapter API"
+ ],
+ "description": "add adapter",
+ "operationId": "ApiController.AddAdapter",
+ "parameters": [
+ {
+ "in": "body",
+ "name": "body",
+ "description": "The details of the adapter",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/object.Adapter"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/add-application": {
+ "post": {
+ "tags": [
+ "Application API"
+ ],
+ "description": "add an application",
+ "operationId": "ApiController.AddApplication",
+ "parameters": [
+ {
+ "in": "body",
+ "name": "body",
+ "description": "The details of the application",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/object.Application"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/add-cert": {
+ "post": {
+ "tags": [
+ "Cert API"
+ ],
+ "description": "add cert",
+ "operationId": "ApiController.AddCert",
+ "parameters": [
+ {
+ "in": "body",
+ "name": "body",
+ "description": "The details of the cert",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/object.Cert"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/add-enforcer": {
+ "post": {
+ "tags": [
+ "Enforcer API"
+ ],
+ "description": "add enforcer",
+ "operationId": "ApiController.AddEnforcer",
+ "parameters": [
+ {
+ "in": "body",
+ "name": "enforcer",
+ "description": "The enforcer object",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/object"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "",
+ "schema": {
+ "$ref": "#/definitions/object.Enforcer"
+ }
+ }
+ }
+ }
+ },
+ "/api/add-form": {
+ "post": {
+ "tags": [
+ "Form API"
+ ],
+ "description": "add form",
+ "operationId": "ApiController.AddForm",
+ "parameters": [
+ {
+ "in": "body",
+ "name": "body",
+ "description": "The details of the form",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/object.Form"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/add-group": {
+ "post": {
+ "tags": [
+ "Group API"
+ ],
+ "description": "add group",
+ "operationId": "ApiController.AddGroup",
+ "parameters": [
+ {
+ "in": "body",
+ "name": "body",
+ "description": "The details of the group",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/object.Group"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/add-invitation": {
+ "post": {
+ "tags": [
+ "Invitation API"
+ ],
+ "description": "add invitation",
+ "operationId": "ApiController.AddInvitation",
+ "parameters": [
+ {
+ "in": "body",
+ "name": "body",
+ "description": "The details of the invitation",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/object.Invitation"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/add-ldap": {
+ "post": {
+ "tags": [
+ "Account API"
+ ],
+ "description": "add ldap",
+ "operationId": "ApiController.AddLdap",
+ "parameters": [
+ {
+ "in": "body",
+ "name": "body",
+ "description": "The details of the ldap",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/object.Ldap"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/add-model": {
+ "post": {
+ "tags": [
+ "Model API"
+ ],
+ "description": "add model",
+ "operationId": "ApiController.AddModel",
+ "parameters": [
+ {
+ "in": "body",
+ "name": "body",
+ "description": "The details of the model",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/object.Model"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/add-order": {
+ "post": {
+ "tags": [
+ "Order API"
+ ],
+ "description": "add order",
+ "operationId": "ApiController.AddOrder",
+ "parameters": [
+ {
+ "in": "body",
+ "name": "body",
+ "description": "The details of the order",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/object.Order"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/add-organization": {
+ "post": {
+ "tags": [
+ "Organization API"
+ ],
+ "description": "add organization",
+ "operationId": "ApiController.AddOrganization",
+ "parameters": [
+ {
+ "in": "body",
+ "name": "body",
+ "description": "The details of the organization",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/object.Organization"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/add-payment": {
+ "post": {
+ "tags": [
+ "Payment API"
+ ],
+ "description": "add payment",
+ "operationId": "ApiController.AddPayment",
+ "parameters": [
+ {
+ "in": "body",
+ "name": "body",
+ "description": "The details of the payment",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/object.Payment"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/add-permission": {
+ "post": {
+ "tags": [
+ "Permission API"
+ ],
+ "description": "add permission",
+ "operationId": "ApiController.AddPermission",
+ "parameters": [
+ {
+ "in": "body",
+ "name": "body",
+ "description": "The details of the permission",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/object.Permission"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/add-plan": {
+ "post": {
+ "tags": [
+ "Plan API"
+ ],
+ "description": "add plan",
+ "operationId": "ApiController.AddPlan",
+ "parameters": [
+ {
+ "in": "body",
+ "name": "body",
+ "description": "The details of the plan",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/object.Plan"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/add-policy": {
+ "post": {
+ "tags": [
+ "Enforcer API"
+ ],
+ "description": "add policy",
+ "operationId": "ApiController.AddPolicy",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "id",
+ "description": "The id ( owner/name ) of enforcer",
+ "required": true,
+ "type": "string"
+ },
+ {
+ "in": "body",
+ "name": "body",
+ "description": "The policy to add",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/xormadapter.CasbinRule"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "",
+ "schema": {
+ "$ref": "#/definitions/Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/add-pricing": {
+ "post": {
+ "tags": [
+ "Pricing API"
+ ],
+ "description": "add pricing",
+ "operationId": "ApiController.AddPricing",
+ "parameters": [
+ {
+ "in": "body",
+ "name": "body",
+ "description": "The details of the pricing",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/object.Pricing"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/add-product": {
+ "post": {
+ "tags": [
+ "Product API"
+ ],
+ "description": "add product",
+ "operationId": "ApiController.AddProduct",
+ "parameters": [
+ {
+ "in": "body",
+ "name": "body",
+ "description": "The details of the product",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/object.Product"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/add-provider": {
+ "post": {
+ "tags": [
+ "Provider API"
+ ],
+ "description": "add provider",
+ "operationId": "ApiController.AddProvider",
+ "parameters": [
+ {
+ "in": "body",
+ "name": "body",
+ "description": "The details of the provider",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/object.Provider"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/add-record": {
+ "post": {
+ "tags": [
+ "Record API"
+ ],
+ "description": "add a record",
+ "operationId": "ApiController.AddRecord",
+ "parameters": [
+ {
+ "in": "body",
+ "name": "body",
+ "description": "The details of the record",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/object.Record"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/add-resource": {
+ "post": {
+ "tags": [
+ "Resource API"
+ ],
+ "operationId": "ApiController.AddResource",
+ "parameters": [
+ {
+ "in": "body",
+ "name": "resource",
+ "description": "Resource object",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/object.Resource"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Success or error",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/add-role": {
+ "post": {
+ "tags": [
+ "Role API"
+ ],
+ "description": "add role",
+ "operationId": "ApiController.AddRole",
+ "parameters": [
+ {
+ "in": "body",
+ "name": "body",
+ "description": "The details of the role",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/object.Role"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/add-session": {
+ "post": {
+ "tags": [
+ "Session API"
+ ],
+ "description": "Add session for one user in one application. If there are other existing sessions, join the session into the list.",
+ "operationId": "ApiController.AddSession",
+ "parameters": [
+ {
+ "in": "body",
+ "name": "body",
+ "description": "The session object to add",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/object.Session"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/add-subscription": {
+ "post": {
+ "tags": [
+ "Subscription API"
+ ],
+ "description": "add subscription",
+ "operationId": "ApiController.AddSubscription",
+ "parameters": [
+ {
+ "in": "body",
+ "name": "body",
+ "description": "The details of the subscription",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/object.Subscription"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/add-syncer": {
+ "post": {
+ "tags": [
+ "Syncer API"
+ ],
+ "description": "add syncer",
+ "operationId": "ApiController.AddSyncer",
+ "parameters": [
+ {
+ "in": "body",
+ "name": "body",
+ "description": "The details of the syncer",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/object.Syncer"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/add-ticket": {
+ "post": {
+ "tags": [
+ "Ticket API"
+ ],
+ "description": "add ticket",
+ "operationId": "ApiController.AddTicket",
+ "parameters": [
+ {
+ "in": "body",
+ "name": "body",
+ "description": "The details of the ticket",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/object.Ticket"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/add-ticket-message": {
+ "post": {
+ "tags": [
+ "Ticket API"
+ ],
+ "description": "add a message to a ticket",
+ "operationId": "ApiController.AddTicketMessage",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "id",
+ "description": "The id ( owner/name ) of the ticket",
+ "required": true,
+ "type": "string"
+ },
+ {
+ "in": "body",
+ "name": "body",
+ "description": "The message to add",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/object.TicketMessage"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/add-token": {
+ "post": {
+ "tags": [
+ "Token API"
+ ],
+ "description": "add token",
+ "operationId": "ApiController.AddToken",
+ "parameters": [
+ {
+ "in": "body",
+ "name": "body",
+ "description": "Details of the token",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/object.Token"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/add-transaction": {
+ "post": {
+ "tags": [
+ "Transaction API"
+ ],
+ "description": "add transaction",
+ "operationId": "ApiController.AddTransaction",
+ "parameters": [
+ {
+ "in": "body",
+ "name": "body",
+ "description": "The details of the transaction",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/object.Transaction"
+ }
+ },
+ {
+ "in": "query",
+ "name": "dryRun",
+ "description": "Dry run mode: set to 'true' or '1' to validate without committing",
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/add-user": {
+ "post": {
+ "tags": [
+ "User API"
+ ],
+ "description": "add user",
+ "operationId": "ApiController.AddUser",
+ "parameters": [
+ {
+ "in": "body",
+ "name": "body",
+ "description": "The details of the user",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/object.User"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/add-user-keys": {
+ "post": {
+ "tags": [
+ "User API"
+ ],
+ "operationId": "ApiController.AddUserKeys",
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/object.Userinfo"
+ }
+ }
+ }
+ }
+ },
+ "/api/add-webhook": {
+ "post": {
+ "tags": [
+ "Webhook API"
+ ],
+ "description": "add webhook",
+ "operationId": "ApiController.AddWebhook",
+ "parameters": [
+ {
+ "in": "body",
+ "name": "body",
+ "description": "The details of the webhook",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/object.Webhook"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/batch-enforce": {
+ "post": {
+ "tags": [
+ "Enforcer API"
+ ],
+ "description": "Call Casbin BatchEnforce API",
+ "operationId": "ApiController.BatchEnforce",
+ "parameters": [
+ {
+ "in": "body",
+ "name": "body",
+ "description": "array of casbin requests",
+ "required": true,
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ {
+ "in": "query",
+ "name": "permissionId",
+ "description": "permission id",
+ "type": "string"
+ },
+ {
+ "in": "query",
+ "name": "modelId",
+ "description": "model id",
+ "type": "string"
+ },
+ {
+ "in": "query",
+ "name": "owner",
+ "description": "owner",
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/cancel-order": {
+ "post": {
+ "tags": [
+ "Order API"
+ ],
+ "description": "cancel an order",
+ "operationId": "ApiController.CancelOrder",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "id",
+ "description": "The id ( owner/name ) of the order",
+ "required": true,
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/check-user-password": {
+ "post": {
+ "tags": [
+ "User API"
+ ],
+ "operationId": "ApiController.CheckUserPassword",
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/object.Userinfo"
+ }
+ }
+ }
+ }
+ },
+ "/api/buy-product": {
+ "post": {
+ "tags": [
+ "Product API"
+ ],
+ "description": "buy product using the deprecated compatibility endpoint, prefer place-order plus pay-order for new integrations",
+ "operationId": "ApiController.BuyProduct",
+ "deprecated": true,
+ "parameters": [
+ {
+ "in": "query",
+ "name": "id",
+ "description": "The id ( owner/name ) of the product",
+ "required": true,
+ "type": "string"
+ },
+ {
+ "in": "query",
+ "name": "providerName",
+ "description": "The name of the provider",
+ "required": true,
+ "type": "string"
+ },
+ {
+ "in": "query",
+ "name": "pricingName",
+ "description": "The name of the pricing (for subscription)",
+ "type": "string"
+ },
+ {
+ "in": "query",
+ "name": "planName",
+ "description": "The name of the plan (for subscription)",
+ "type": "string"
+ },
+ {
+ "in": "query",
+ "name": "userName",
+ "description": "The username to buy product for (admin only)",
+ "type": "string"
+ },
+ {
+ "in": "query",
+ "name": "paymentEnv",
+ "description": "The payment environment",
+ "type": "string"
+ },
+ {
+ "in": "query",
+ "name": "customPrice",
+ "description": "Custom price for recharge products",
+ "type": "number"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/delete-adapter": {
+ "post": {
+ "tags": [
+ "Adapter API"
+ ],
+ "description": "delete adapter",
+ "operationId": "ApiController.DeleteAdapter",
+ "parameters": [
+ {
+ "in": "body",
+ "name": "body",
+ "description": "The details of the adapter",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/object.Adapter"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/delete-application": {
+ "post": {
+ "tags": [
+ "Application API"
+ ],
+ "description": "delete an application",
+ "operationId": "ApiController.DeleteApplication",
+ "parameters": [
+ {
+ "in": "body",
+ "name": "body",
+ "description": "The details of the application",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/object.Application"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/delete-cert": {
+ "post": {
+ "tags": [
+ "Cert API"
+ ],
+ "description": "delete cert",
+ "operationId": "ApiController.DeleteCert",
+ "parameters": [
+ {
+ "in": "body",
+ "name": "body",
+ "description": "The details of the cert",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/object.Cert"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/delete-enforcer": {
+ "post": {
+ "tags": [
+ "Enforcer API"
+ ],
+ "description": "delete enforcer",
+ "operationId": "ApiController.DeleteEnforcer",
+ "parameters": [
+ {
+ "in": "body",
+ "name": "body",
+ "description": "The enforcer object",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/object.Enforcer"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "",
+ "schema": {
+ "$ref": "#/definitions/object.Enforcer"
+ }
+ }
+ }
+ }
+ },
+ "/api/delete-form": {
+ "post": {
+ "tags": [
+ "Form API"
+ ],
+ "description": "delete form",
+ "operationId": "ApiController.DeleteForm",
+ "parameters": [
+ {
+ "in": "body",
+ "name": "body",
+ "description": "The details of the form",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/object.Form"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/delete-group": {
+ "post": {
+ "tags": [
+ "Group API"
+ ],
+ "description": "delete group",
+ "operationId": "ApiController.DeleteGroup",
+ "parameters": [
+ {
+ "in": "body",
+ "name": "body",
+ "description": "The details of the group",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/object.Group"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/delete-invitation": {
+ "post": {
+ "tags": [
+ "Invitation API"
+ ],
+ "description": "delete invitation",
+ "operationId": "ApiController.DeleteInvitation",
+ "parameters": [
+ {
+ "in": "body",
+ "name": "body",
+ "description": "The details of the invitation",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/object.Invitation"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/delete-ldap": {
+ "post": {
+ "tags": [
+ "Account API"
+ ],
+ "description": "delete ldap",
+ "operationId": "ApiController.DeleteLdap",
+ "parameters": [
+ {
+ "in": "body",
+ "name": "body",
+ "description": "The details of the ldap",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/object.Ldap"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/delete-mfa/": {
+ "post": {
+ "tags": [
+ "MFA API"
+ ],
+ "description": ": Delete MFA",
+ "operationId": "ApiController.DeleteMfa",
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/delete-model": {
+ "post": {
+ "tags": [
+ "Model API"
+ ],
+ "description": "delete model",
+ "operationId": "ApiController.DeleteModel",
+ "parameters": [
+ {
+ "in": "body",
+ "name": "body",
+ "description": "The details of the model",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/object.Model"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/delete-order": {
+ "post": {
+ "tags": [
+ "Order API"
+ ],
+ "description": "delete order",
+ "operationId": "ApiController.DeleteOrder",
+ "parameters": [
+ {
+ "in": "body",
+ "name": "body",
+ "description": "The details of the order",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/object.Order"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/delete-organization": {
+ "post": {
+ "tags": [
+ "Organization API"
+ ],
+ "description": "delete organization",
+ "operationId": "ApiController.DeleteOrganization",
+ "parameters": [
+ {
+ "in": "body",
+ "name": "body",
+ "description": "The details of the organization",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/object.Organization"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/delete-payment": {
+ "post": {
+ "tags": [
+ "Payment API"
+ ],
+ "description": "delete payment",
+ "operationId": "ApiController.DeletePayment",
+ "parameters": [
+ {
+ "in": "body",
+ "name": "body",
+ "description": "The details of the payment",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/object.Payment"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/delete-permission": {
+ "post": {
+ "tags": [
+ "Permission API"
+ ],
+ "description": "delete permission",
+ "operationId": "ApiController.DeletePermission",
+ "parameters": [
+ {
+ "in": "body",
+ "name": "body",
+ "description": "The details of the permission",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/object.Permission"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/delete-plan": {
+ "post": {
+ "tags": [
+ "Plan API"
+ ],
+ "description": "delete plan",
+ "operationId": "ApiController.DeletePlan",
+ "parameters": [
+ {
+ "in": "body",
+ "name": "body",
+ "description": "The details of the plan",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/object.Plan"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/delete-pricing": {
+ "post": {
+ "tags": [
+ "Pricing API"
+ ],
+ "description": "delete pricing",
+ "operationId": "ApiController.DeletePricing",
+ "parameters": [
+ {
+ "in": "body",
+ "name": "body",
+ "description": "The details of the pricing",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/object.Pricing"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/delete-product": {
+ "post": {
+ "tags": [
+ "Product API"
+ ],
+ "description": "delete product",
+ "operationId": "ApiController.DeleteProduct",
+ "parameters": [
+ {
+ "in": "body",
+ "name": "body",
+ "description": "The details of the product",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/object.Product"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/delete-provider": {
+ "post": {
+ "tags": [
+ "Provider API"
+ ],
+ "description": "delete provider",
+ "operationId": "ApiController.DeleteProvider",
+ "parameters": [
+ {
+ "in": "body",
+ "name": "body",
+ "description": "The details of the provider",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/object.Provider"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/delete-resource": {
+ "post": {
+ "tags": [
+ "Resource API"
+ ],
+ "operationId": "ApiController.DeleteResource",
+ "parameters": [
+ {
+ "in": "body",
+ "name": "resource",
+ "description": "Resource object",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/object.Resource"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Success or error",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/delete-role": {
+ "post": {
+ "tags": [
+ "Role API"
+ ],
+ "description": "delete role",
+ "operationId": "ApiController.DeleteRole",
+ "parameters": [
+ {
+ "in": "body",
+ "name": "body",
+ "description": "The details of the role",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/object.Role"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/delete-session": {
+ "post": {
+ "tags": [
+ "Session API"
+ ],
+ "description": "Delete session for one user in one application.",
+ "operationId": "ApiController.DeleteSession",
+ "parameters": [
+ {
+ "in": "body",
+ "name": "body",
+ "description": "The session object to delete",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/object.Session"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/delete-subscription": {
+ "post": {
+ "tags": [
+ "Subscription API"
+ ],
+ "description": "delete subscription",
+ "operationId": "ApiController.DeleteSubscription",
+ "parameters": [
+ {
+ "in": "body",
+ "name": "body",
+ "description": "The details of the subscription",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/object.Subscription"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/delete-syncer": {
+ "post": {
+ "tags": [
+ "Syncer API"
+ ],
+ "description": "delete syncer",
+ "operationId": "ApiController.DeleteSyncer",
+ "parameters": [
+ {
+ "in": "body",
+ "name": "body",
+ "description": "The details of the syncer",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/object.Syncer"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/delete-ticket": {
+ "post": {
+ "tags": [
+ "Ticket API"
+ ],
+ "description": "delete ticket",
+ "operationId": "ApiController.DeleteTicket",
+ "parameters": [
+ {
+ "in": "body",
+ "name": "body",
+ "description": "The details of the ticket",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/object.Ticket"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/delete-token": {
+ "post": {
+ "tags": [
+ "Token API"
+ ],
+ "description": "delete token",
+ "operationId": "ApiController.DeleteToken",
+ "parameters": [
+ {
+ "in": "body",
+ "name": "body",
+ "description": "Details of the token",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/object.Token"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/delete-transaction": {
+ "post": {
+ "tags": [
+ "Transaction API"
+ ],
+ "description": "delete transaction",
+ "operationId": "ApiController.DeleteTransaction",
+ "parameters": [
+ {
+ "in": "body",
+ "name": "body",
+ "description": "The details of the transaction",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/object.Transaction"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/delete-user": {
+ "post": {
+ "tags": [
+ "User API"
+ ],
+ "description": "delete user",
+ "operationId": "ApiController.DeleteUser",
+ "parameters": [
+ {
+ "in": "body",
+ "name": "body",
+ "description": "The details of the user",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/object.User"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/delete-webhook": {
+ "post": {
+ "tags": [
+ "Webhook API"
+ ],
+ "description": "delete webhook",
+ "operationId": "ApiController.DeleteWebhook",
+ "parameters": [
+ {
+ "in": "body",
+ "name": "body",
+ "description": "The details of the webhook",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/object.Webhook"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/device-auth": {
+ "post": {
+ "tags": [
+ "Device Authorization Endpoint"
+ ],
+ "description": "Endpoint for the device authorization flow",
+ "operationId": "ApiController.DeviceAuth",
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/object.DeviceAuthResponse"
+ }
+ }
+ }
+ }
+ },
+ "/api/enforce": {
+ "post": {
+ "tags": [
+ "Enforcer API"
+ ],
+ "description": "Call Casbin Enforce API",
+ "operationId": "ApiController.Enforce",
+ "parameters": [
+ {
+ "in": "body",
+ "name": "body",
+ "description": "Casbin request",
+ "required": true,
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ {
+ "in": "query",
+ "name": "permissionId",
+ "description": "permission id",
+ "type": "string"
+ },
+ {
+ "in": "query",
+ "name": "modelId",
+ "description": "model id",
+ "type": "string"
+ },
+ {
+ "in": "query",
+ "name": "resourceId",
+ "description": "resource id",
+ "type": "string"
+ },
+ {
+ "in": "query",
+ "name": "owner",
+ "description": "owner",
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/exit-impersonation-user": {
+ "post": {
+ "tags": [
+ "User API"
+ ],
+ "description": "clear impersonation info for current session",
+ "operationId": "ApiController.ExitImpersonateUser",
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/faceid-signin-begin": {
+ "get": {
+ "tags": [
+ "Login API"
+ ],
+ "description": "FaceId Login Flow 1st stage",
+ "operationId": "ApiController.FaceIDSigninBegin",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "owner",
+ "description": "owner",
+ "required": true,
+ "type": "string"
+ },
+ {
+ "in": "query",
+ "name": "name",
+ "description": "name",
+ "required": true,
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/get-account": {
+ "get": {
+ "tags": [
+ "Account API"
+ ],
+ "description": "get the details of the current account",
+ "operationId": "ApiController.GetAccount",
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/get-adapter": {
+ "get": {
+ "tags": [
+ "Adapter API"
+ ],
+ "description": "get adapter",
+ "operationId": "ApiController.GetAdapter",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "id",
+ "description": "The id ( owner/name ) of the adapter",
+ "required": true,
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/object.Adapter"
+ }
+ }
+ }
+ }
+ },
+ "/api/get-adapters": {
+ "get": {
+ "tags": [
+ "Adapter API"
+ ],
+ "description": "get adapters",
+ "operationId": "ApiController.GetAdapters",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "owner",
+ "description": "The owner of adapters",
+ "required": true,
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/object.Adapter"
+ }
+ }
+ }
+ }
+ }
+ },
+ "/api/get-all-actions": {
+ "get": {
+ "tags": [
+ "Enforcer API"
+ ],
+ "description": "Get all actions for a user (Casbin API)",
+ "operationId": "ApiController.GetAllActions",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "userId",
+ "description": "user id like built-in/admin",
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/get-all-objects": {
+ "get": {
+ "tags": [
+ "Enforcer API"
+ ],
+ "description": "Get all objects for a user (Casbin API)",
+ "operationId": "ApiController.GetAllObjects",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "userId",
+ "description": "user id like built-in/admin",
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/get-all-roles": {
+ "get": {
+ "tags": [
+ "Enforcer API"
+ ],
+ "description": "Get all roles for a user (Casbin API)",
+ "operationId": "ApiController.GetAllRoles",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "userId",
+ "description": "user id like built-in/admin",
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/get-app-login": {
+ "get": {
+ "tags": [
+ "Login API"
+ ],
+ "description": "get application login",
+ "operationId": "ApiController.GetApplicationLogin",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "clientId",
+ "description": "client id",
+ "required": true,
+ "type": "string"
+ },
+ {
+ "in": "query",
+ "name": "responseType",
+ "description": "response type",
+ "required": true,
+ "type": "string"
+ },
+ {
+ "in": "query",
+ "name": "redirectUri",
+ "description": "redirect uri",
+ "required": true,
+ "type": "string"
+ },
+ {
+ "in": "query",
+ "name": "scope",
+ "description": "scope",
+ "required": true,
+ "type": "string"
+ },
+ {
+ "in": "query",
+ "name": "state",
+ "description": "state",
+ "required": true,
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/get-application": {
+ "get": {
+ "tags": [
+ "Application API"
+ ],
+ "description": "get the detail of an application",
+ "operationId": "ApiController.GetApplication",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "id",
+ "description": "The id ( owner/name ) of the application.",
+ "required": true,
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/object.Application"
+ }
+ }
+ }
+ }
+ },
+ "/api/get-applications": {
+ "get": {
+ "tags": [
+ "Application API"
+ ],
+ "description": "get all applications",
+ "operationId": "ApiController.GetApplications",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "owner",
+ "description": "The owner of applications.",
+ "required": true,
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/object.Application"
+ }
+ }
+ }
+ }
+ }
+ },
+ "/api/get-captcha": {
+ "get": {
+ "tags": [
+ "Login API"
+ ],
+ "operationId": "ApiController.GetCaptcha",
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/object.Userinfo"
+ }
+ }
+ }
+ }
+ },
+ "/api/get-captcha-status": {
+ "get": {
+ "tags": [
+ "Token API"
+ ],
+ "description": "Get Login Error Counts",
+ "operationId": "ApiController.GetCaptchaStatus",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "id",
+ "description": "The id ( owner/name ) of user",
+ "required": true,
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/get-cert": {
+ "get": {
+ "tags": [
+ "Cert API"
+ ],
+ "description": "get cert",
+ "operationId": "ApiController.GetCert",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "id",
+ "description": "The id ( owner/name ) of the cert",
+ "required": true,
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/object.Cert"
+ }
+ }
+ }
+ }
+ },
+ "/api/get-certs": {
+ "get": {
+ "tags": [
+ "Cert API"
+ ],
+ "description": "get certs",
+ "operationId": "ApiController.GetCerts",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "owner",
+ "description": "The owner of certs",
+ "required": true,
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/object.Cert"
+ }
+ }
+ }
+ }
+ }
+ },
+ "/api/get-dashboard": {
+ "get": {
+ "tags": [
+ "System API"
+ ],
+ "description": "get information of dashboard",
+ "operationId": "ApiController.GetDashboard",
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/get-default-application": {
+ "get": {
+ "tags": [
+ "Organization API"
+ ],
+ "description": "get default application",
+ "operationId": "ApiController.GetDefaultApplication",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "id",
+ "description": "organization id",
+ "required": true,
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/get-email-and-phone": {
+ "get": {
+ "tags": [
+ "User API"
+ ],
+ "description": "get email and phone by username",
+ "operationId": "ApiController.GetEmailAndPhone",
+ "parameters": [
+ {
+ "in": "formData",
+ "name": "username",
+ "description": "The username of the user",
+ "required": true,
+ "type": "string"
+ },
+ {
+ "in": "formData",
+ "name": "organization",
+ "description": "The organization of the user",
+ "required": true,
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/get-enforcer": {
+ "get": {
+ "tags": [
+ "Enforcer API"
+ ],
+ "description": "get enforcer",
+ "operationId": "ApiController.GetEnforcer",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "id",
+ "description": "The id ( owner/name ) of enforcer",
+ "required": true,
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "",
+ "schema": {
+ "$ref": "#/definitions/object.Enforcer"
+ }
+ }
+ }
+ }
+ },
+ "/api/get-enforcers": {
+ "get": {
+ "tags": [
+ "Enforcer API"
+ ],
+ "description": "get enforcers",
+ "operationId": "ApiController.GetEnforcers",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "owner",
+ "description": "The owner of enforcers",
+ "required": true,
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/object.Enforcer"
+ }
+ }
+ }
+ }
+ }
+ },
+ "/api/get-filtered-policies": {
+ "post": {
+ "tags": [
+ "Enforcer API"
+ ],
+ "description": "get filtered policies with support for multiple filters via POST body",
+ "operationId": "ApiController.GetFilteredPolicies",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "id",
+ "description": "The id ( owner/name ) of enforcer",
+ "required": true,
+ "type": "string"
+ },
+ {
+ "in": "body",
+ "name": "body",
+ "description": "Array of filter objects for multiple filters",
+ "required": true,
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/object.Filter"
+ }
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/xormadapter.CasbinRule"
+ }
+ }
+ }
+ }
+ }
+ },
+ "/api/get-form": {
+ "get": {
+ "tags": [
+ "Form API"
+ ],
+ "description": "get form",
+ "operationId": "ApiController.GetForm",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "id",
+ "description": "The id (owner/name) of form",
+ "required": true,
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/object.Form"
+ }
+ }
+ }
+ }
+ },
+ "/api/get-forms": {
+ "get": {
+ "tags": [
+ "Form API"
+ ],
+ "description": "get forms",
+ "operationId": "ApiController.GetForms",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "owner",
+ "description": "The owner of form",
+ "required": true,
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/object.Form"
+ }
+ }
+ }
+ }
+ }
+ },
+ "/api/get-global-certs": {
+ "get": {
+ "tags": [
+ "Cert API"
+ ],
+ "description": "get global certs",
+ "operationId": "ApiController.GetGlobalCerts",
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/object.Cert"
+ }
+ }
+ }
+ }
+ }
+ },
+ "/api/get-global-forms": {
+ "get": {
+ "tags": [
+ "Form API"
+ ],
+ "description": "get global forms",
+ "operationId": "ApiController.GetGlobalForms",
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/object.Form"
+ }
+ }
+ }
+ }
+ }
+ },
+ "/api/get-global-providers": {
+ "get": {
+ "tags": [
+ "Provider API"
+ ],
+ "description": "get Global providers",
+ "operationId": "ApiController.GetGlobalProviders",
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/object.Provider"
+ }
+ }
+ }
+ }
+ }
+ },
+ "/api/get-global-users": {
+ "get": {
+ "tags": [
+ "User API"
+ ],
+ "description": "get global users",
+ "operationId": "ApiController.GetGlobalUsers",
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/object.User"
+ }
+ }
+ }
+ }
+ }
+ },
+ "/api/get-group": {
+ "get": {
+ "tags": [
+ "Group API"
+ ],
+ "description": "get group",
+ "operationId": "ApiController.GetGroup",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "id",
+ "description": "The id ( owner/name ) of the group",
+ "required": true,
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/object.Group"
+ }
+ }
+ }
+ }
+ },
+ "/api/get-groups": {
+ "get": {
+ "tags": [
+ "Group API"
+ ],
+ "description": "get groups",
+ "operationId": "ApiController.GetGroups",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "owner",
+ "description": "The owner of groups",
+ "required": true,
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/object.Group"
+ }
+ }
+ }
+ }
+ }
+ },
+ "/api/get-invitation": {
+ "get": {
+ "tags": [
+ "Invitation API"
+ ],
+ "description": "get invitation",
+ "operationId": "ApiController.GetInvitation",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "id",
+ "description": "The id ( owner/name ) of the invitation",
+ "required": true,
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/object.Invitation"
+ }
+ }
+ }
+ }
+ },
+ "/api/get-invitation-info": {
+ "get": {
+ "tags": [
+ "Invitation API"
+ ],
+ "description": "get invitation code information",
+ "operationId": "ApiController.GetInvitationCodeInfo",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "code",
+ "description": "Invitation code",
+ "required": true,
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/object.Invitation"
+ }
+ }
+ }
+ }
+ },
+ "/api/get-invitations": {
+ "get": {
+ "tags": [
+ "Invitation API"
+ ],
+ "description": "get invitations",
+ "operationId": "ApiController.GetInvitations",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "owner",
+ "description": "The owner of invitations",
+ "required": true,
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/object.Invitation"
+ }
+ }
+ }
+ }
+ }
+ },
+ "/api/get-ldap": {
+ "get": {
+ "tags": [
+ "Account API"
+ ],
+ "description": "get ldap",
+ "operationId": "ApiController.GetLdap",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "id",
+ "description": "id",
+ "required": true,
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/object.Ldap"
+ }
+ }
+ }
+ }
+ },
+ "/api/get-ldap-users": {
+ "get": {
+ "tags": [
+ "Account API"
+ ],
+ "description": "get ldap users",
+ "operationId": "ApiController.GetLdapser",
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.LdapResp"
+ }
+ }
+ }
+ }
+ },
+ "/api/get-ldaps": {
+ "get": {
+ "tags": [
+ "Account API"
+ ],
+ "description": "get ldaps",
+ "operationId": "ApiController.GetLdaps",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "owner",
+ "description": "owner",
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/object.Ldap"
+ }
+ }
+ }
+ }
+ }
+ },
+ "/api/get-model": {
+ "get": {
+ "tags": [
+ "Model API"
+ ],
+ "description": "get model",
+ "operationId": "ApiController.GetModel",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "id",
+ "description": "The id ( owner/name ) of the model",
+ "required": true,
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/object.Model"
+ }
+ }
+ }
+ }
+ },
+ "/api/get-models": {
+ "get": {
+ "tags": [
+ "Model API"
+ ],
+ "description": "get models",
+ "operationId": "ApiController.GetModels",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "owner",
+ "description": "The owner of models",
+ "required": true,
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/object.Model"
+ }
+ }
+ }
+ }
+ }
+ },
+ "/api/get-order": {
+ "get": {
+ "tags": [
+ "Order API"
+ ],
+ "description": "get order",
+ "operationId": "ApiController.GetOrder",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "id",
+ "description": "The id ( owner/name ) of the order",
+ "required": true,
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/object.Order"
+ }
+ }
+ }
+ }
+ },
+ "/api/get-orders": {
+ "get": {
+ "tags": [
+ "Order API"
+ ],
+ "description": "get orders",
+ "operationId": "ApiController.GetOrders",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "owner",
+ "description": "The owner of orders",
+ "required": true,
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/object.Order"
+ }
+ }
+ }
+ }
+ }
+ },
+ "/api/get-organization": {
+ "get": {
+ "tags": [
+ "Organization API"
+ ],
+ "description": "get organization",
+ "operationId": "ApiController.GetOrganization",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "id",
+ "description": "organization id",
+ "required": true,
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/object.Organization"
+ }
+ }
+ }
+ }
+ },
+ "/api/get-organization-applications": {
+ "get": {
+ "tags": [
+ "Application API"
+ ],
+ "description": "get the detail of the organization's application",
+ "operationId": "ApiController.GetOrganizationApplications",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "organization",
+ "description": "The organization name",
+ "required": true,
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/object.Application"
+ }
+ }
+ }
+ }
+ }
+ },
+ "/api/get-organization-names": {
+ "get": {
+ "tags": [
+ "Organization API"
+ ],
+ "description": "get all organization name and displayName",
+ "operationId": "ApiController.GetOrganizationNames",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "owner",
+ "description": "owner",
+ "required": true,
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/object.Organization"
+ }
+ }
+ }
+ }
+ }
+ },
+ "/api/get-organizations": {
+ "get": {
+ "tags": [
+ "Organization API"
+ ],
+ "description": "get organizations",
+ "operationId": "ApiController.GetOrganizations",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "owner",
+ "description": "owner",
+ "required": true,
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/object.Organization"
+ }
+ }
+ }
+ }
+ }
+ },
+ "/api/get-payment": {
+ "get": {
+ "tags": [
+ "Verification API"
+ ],
+ "description": "get payment",
+ "operationId": "ApiController.GetVerification",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "id",
+ "description": "The id ( owner/name ) of the payment",
+ "required": true,
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/object.Verification"
+ }
+ }
+ }
+ }
+ },
+ "/api/get-payments": {
+ "get": {
+ "tags": [
+ "Verification API"
+ ],
+ "description": "get payments",
+ "operationId": "ApiController.GetVerifications",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "owner",
+ "description": "The owner of payments",
+ "required": true,
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/object.Verification"
+ }
+ }
+ }
+ }
+ }
+ },
+ "/api/get-permission": {
+ "get": {
+ "tags": [
+ "Permission API"
+ ],
+ "description": "get permission",
+ "operationId": "ApiController.GetPermission",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "id",
+ "description": "The id ( owner/name ) of the permission",
+ "required": true,
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/object.Permission"
+ }
+ }
+ }
+ }
+ },
+ "/api/get-permissions": {
+ "get": {
+ "tags": [
+ "Permission API"
+ ],
+ "description": "get permissions",
+ "operationId": "ApiController.GetPermissions",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "owner",
+ "description": "The owner of permissions",
+ "required": true,
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/object.Permission"
+ }
+ }
+ }
+ }
+ }
+ },
+ "/api/get-permissions-by-role": {
+ "get": {
+ "tags": [
+ "Permission API"
+ ],
+ "description": "get permissions by role",
+ "operationId": "ApiController.GetPermissionsByRole",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "id",
+ "description": "The id ( owner/name ) of the role",
+ "required": true,
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/object.Permission"
+ }
+ }
+ }
+ }
+ }
+ },
+ "/api/get-permissions-by-submitter": {
+ "get": {
+ "tags": [
+ "Permission API"
+ ],
+ "description": "get permissions by submitter",
+ "operationId": "ApiController.GetPermissionsBySubmitter",
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/object.Permission"
+ }
+ }
+ }
+ }
+ }
+ },
+ "/api/get-plan": {
+ "get": {
+ "tags": [
+ "Plan API"
+ ],
+ "description": "get plan",
+ "operationId": "ApiController.GetPlan",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "id",
+ "description": "The id ( owner/name ) of the plan",
+ "required": true,
+ "type": "string"
+ },
+ {
+ "in": "query",
+ "name": "includeOption",
+ "description": "Should include plan's option",
+ "type": "boolean"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/object.Plan"
+ }
+ }
+ }
+ }
+ },
+ "/api/get-plans": {
+ "get": {
+ "tags": [
+ "Plan API"
+ ],
+ "description": "get plans",
+ "operationId": "ApiController.GetPlans",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "owner",
+ "description": "The owner of plans",
+ "required": true,
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/object.Plan"
+ }
+ }
+ }
+ }
+ }
+ },
+ "/api/get-policies": {
+ "get": {
+ "tags": [
+ "Enforcer API"
+ ],
+ "description": "get policies",
+ "operationId": "ApiController.GetPolicies",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "id",
+ "description": "The id ( owner/name ) of enforcer",
+ "required": true,
+ "type": "string"
+ },
+ {
+ "in": "query",
+ "name": "adapterId",
+ "description": "The adapter id",
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/xormadapter.CasbinRule"
+ }
+ }
+ }
+ }
+ }
+ },
+ "/api/get-pricing": {
+ "get": {
+ "tags": [
+ "Pricing API"
+ ],
+ "description": "get pricing",
+ "operationId": "ApiController.GetPricing",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "id",
+ "description": "The id ( owner/name ) of the pricing",
+ "required": true,
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/object.Pricing"
+ }
+ }
+ }
+ }
+ },
+ "/api/get-pricings": {
+ "get": {
+ "tags": [
+ "Pricing API"
+ ],
+ "description": "get pricings",
+ "operationId": "ApiController.GetPricings",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "owner",
+ "description": "The owner of pricings",
+ "required": true,
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/object.Pricing"
+ }
+ }
+ }
+ }
+ }
+ },
+ "/api/get-product": {
+ "get": {
+ "tags": [
+ "Product API"
+ ],
+ "description": "get product",
+ "operationId": "ApiController.GetProduct",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "id",
+ "description": "The id ( owner/name ) of the product",
+ "required": true,
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/object.Product"
+ }
+ }
+ }
+ }
+ },
+ "/api/get-products": {
+ "get": {
+ "tags": [
+ "Product API"
+ ],
+ "description": "get products",
+ "operationId": "ApiController.GetProducts",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "owner",
+ "description": "The owner of products",
+ "required": true,
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/object.Product"
+ }
+ }
+ }
+ }
+ }
+ },
+ "/api/get-prometheus-info": {
+ "get": {
+ "tags": [
+ "System API"
+ ],
+ "description": "get Prometheus Info",
+ "operationId": "ApiController.GetPrometheusInfo",
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/object.PrometheusInfo"
+ }
+ }
+ }
+ }
+ },
+ "/api/get-provider": {
+ "get": {
+ "tags": [
+ "Provider API"
+ ],
+ "description": "get provider",
+ "operationId": "ApiController.GetProvider",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "id",
+ "description": "The id ( owner/name ) of the provider",
+ "required": true,
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/object.Provider"
+ }
+ }
+ }
+ }
+ },
+ "/api/get-providers": {
+ "get": {
+ "tags": [
+ "Provider API"
+ ],
+ "description": "get providers",
+ "operationId": "ApiController.GetProviders",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "owner",
+ "description": "The owner of providers",
+ "required": true,
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/object.Provider"
+ }
+ }
+ }
+ }
+ }
+ },
+ "/api/get-qrcode": {
+ "get": {
+ "tags": [
+ "System API"
+ ],
+ "operationId": "ApiController.GetWechatQRCode",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "id",
+ "description": "The id ( owner/name ) of provider",
+ "required": true,
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/get-records": {
+ "get": {
+ "tags": [
+ "Record API"
+ ],
+ "description": "get all records",
+ "operationId": "ApiController.GetRecords",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "pageSize",
+ "description": "The size of each page",
+ "required": true,
+ "type": "string"
+ },
+ {
+ "in": "query",
+ "name": "p",
+ "description": "The number of the page",
+ "required": true,
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/object.Record"
+ }
+ }
+ }
+ }
+ },
+ "/api/get-records-filter": {
+ "post": {
+ "tags": [
+ "Record API"
+ ],
+ "description": "get records by filter",
+ "operationId": "ApiController.GetRecordsByFilter",
+ "parameters": [
+ {
+ "in": "body",
+ "name": "filter",
+ "description": "filter Record message",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/object.Record"
+ }
+ }
+ }
+ }
+ },
+ "/api/get-resource": {
+ "get": {
+ "tags": [
+ "Resource API"
+ ],
+ "description": "get resource",
+ "operationId": "ApiController.GetResource",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "id",
+ "description": "The id ( owner/name ) of resource",
+ "required": true,
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/object.Resource"
+ }
+ }
+ }
+ }
+ },
+ "/api/get-resources": {
+ "get": {
+ "tags": [
+ "Resource API"
+ ],
+ "description": "get resources",
+ "operationId": "ApiController.GetResources",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "owner",
+ "description": "Owner",
+ "required": true,
+ "type": "string"
+ },
+ {
+ "in": "query",
+ "name": "user",
+ "description": "User",
+ "required": true,
+ "type": "string"
+ },
+ {
+ "in": "query",
+ "name": "pageSize",
+ "description": "Page Size",
+ "type": "integer"
+ },
+ {
+ "in": "query",
+ "name": "p",
+ "description": "Page Number",
+ "type": "integer"
+ },
+ {
+ "in": "query",
+ "name": "field",
+ "description": "Field",
+ "type": "string"
+ },
+ {
+ "in": "query",
+ "name": "value",
+ "description": "Value",
+ "type": "string"
+ },
+ {
+ "in": "query",
+ "name": "sortField",
+ "description": "Sort Field",
+ "type": "string"
+ },
+ {
+ "in": "query",
+ "name": "sortOrder",
+ "description": "Sort Order",
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/object.Resource"
+ }
+ }
+ }
+ }
+ }
+ },
+ "/api/get-role": {
+ "get": {
+ "tags": [
+ "Role API"
+ ],
+ "description": "get role",
+ "operationId": "ApiController.GetRole",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "id",
+ "description": "The id ( owner/name ) of the role",
+ "required": true,
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/object.Role"
+ }
+ }
+ }
+ }
+ },
+ "/api/get-roles": {
+ "get": {
+ "tags": [
+ "Role API"
+ ],
+ "description": "get roles",
+ "operationId": "ApiController.GetRoles",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "owner",
+ "description": "The owner of roles",
+ "required": true,
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/object.Role"
+ }
+ }
+ }
+ }
+ }
+ },
+ "/api/get-session": {
+ "get": {
+ "tags": [
+ "Session API"
+ ],
+ "description": "Get session for one user in one application.",
+ "operationId": "ApiController.GetSingleSession",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "sessionPkId",
+ "description": "The session ID in format: organization/user/application (e.g., built-in/admin/app-built-in)",
+ "required": true,
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ },
+ "/api/get-sessions": {
+ "get": {
+ "tags": [
+ "Session API"
+ ],
+ "description": "Get organization user sessions.",
+ "operationId": "ApiController.GetSessions",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "owner",
+ "description": "The organization name",
+ "required": true,
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ },
+ "/api/get-sorted-users": {
+ "get": {
+ "tags": [
+ "User API"
+ ],
+ "operationId": "ApiController.GetSortedUsers",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "owner",
+ "description": "The owner of users",
+ "required": true,
+ "type": "string"
+ },
+ {
+ "in": "query",
+ "name": "sorter",
+ "description": "The DB column name to sort by, e.g., created_time",
+ "required": true,
+ "type": "string"
+ },
+ {
+ "in": "query",
+ "name": "limit",
+ "description": "The count of users to return, e.g., 25",
+ "required": true,
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/object.User"
+ }
+ }
+ }
+ }
+ }
+ },
+ "/api/get-subscription": {
+ "get": {
+ "tags": [
+ "Subscription API"
+ ],
+ "description": "get subscription",
+ "operationId": "ApiController.GetSubscription",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "id",
+ "description": "The id ( owner/name ) of the subscription",
+ "required": true,
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/object.Subscription"
+ }
+ }
+ }
+ }
+ },
+ "/api/get-subscriptions": {
+ "get": {
+ "tags": [
+ "Subscription API"
+ ],
+ "description": "get subscriptions",
+ "operationId": "ApiController.GetSubscriptions",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "owner",
+ "description": "The owner of subscriptions",
+ "required": true,
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/object.Subscription"
+ }
+ }
+ }
+ }
+ }
+ },
+ "/api/get-syncer": {
+ "get": {
+ "tags": [
+ "Syncer API"
+ ],
+ "description": "get syncer",
+ "operationId": "ApiController.GetSyncer",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "id",
+ "description": "The id ( owner/name ) of the syncer",
+ "required": true,
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/object.Syncer"
+ }
+ }
+ }
+ }
+ },
+ "/api/get-syncers": {
+ "get": {
+ "tags": [
+ "Syncer API"
+ ],
+ "description": "get syncers",
+ "operationId": "ApiController.GetSyncers",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "owner",
+ "description": "The owner of syncers",
+ "required": true,
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/object.Syncer"
+ }
+ }
+ }
+ }
+ }
+ },
+ "/api/get-system-info": {
+ "get": {
+ "tags": [
+ "System API"
+ ],
+ "description": "get system info like CPU and memory usage",
+ "operationId": "ApiController.GetSystemInfo",
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/util.SystemInfo"
+ }
+ }
+ }
+ }
+ },
+ "/api/get-ticket": {
+ "get": {
+ "tags": [
+ "Ticket API"
+ ],
+ "description": "get ticket",
+ "operationId": "ApiController.GetTicket",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "id",
+ "description": "The id ( owner/name ) of the ticket",
+ "required": true,
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/object.Ticket"
+ }
+ }
+ }
+ }
+ },
+ "/api/get-tickets": {
+ "get": {
+ "tags": [
+ "Ticket API"
+ ],
+ "description": "get tickets",
+ "operationId": "ApiController.GetTickets",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "owner",
+ "description": "The owner of tickets",
+ "required": true,
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/object.Ticket"
+ }
+ }
+ }
+ }
+ }
+ },
+ "/api/get-token": {
+ "get": {
+ "tags": [
+ "Token API"
+ ],
+ "description": "get token",
+ "operationId": "ApiController.GetToken",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "id",
+ "description": "The token ID in format: organization/token-name (e.g., built-in/token-123456)",
+ "required": true,
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/object.Token"
+ }
+ }
+ }
+ }
+ },
+ "/api/get-tokens": {
+ "get": {
+ "tags": [
+ "Token API"
+ ],
+ "description": "get tokens",
+ "operationId": "ApiController.GetTokens",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "owner",
+ "description": "The organization name (e.g., built-in)",
+ "required": true,
+ "type": "string"
+ },
+ {
+ "in": "query",
+ "name": "pageSize",
+ "description": "The size of each page",
+ "required": true,
+ "type": "string"
+ },
+ {
+ "in": "query",
+ "name": "p",
+ "description": "The number of the page",
+ "required": true,
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/object.Token"
+ }
+ }
+ }
+ }
+ }
+ },
+ "/api/get-transaction": {
+ "get": {
+ "tags": [
+ "Transaction API"
+ ],
+ "description": "get transaction",
+ "operationId": "ApiController.GetTransaction",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "id",
+ "description": "The id ( owner/name ) of the transaction",
+ "required": true,
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/object.Transaction"
+ }
+ }
+ }
+ }
+ },
+ "/api/get-transactions": {
+ "get": {
+ "tags": [
+ "Transaction API"
+ ],
+ "description": "get transactions",
+ "operationId": "ApiController.GetTransactions",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "owner",
+ "description": "The owner of transactions",
+ "required": true,
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/object.Transaction"
+ }
+ }
+ }
+ }
+ }
+ },
+ "/api/get-user": {
+ "get": {
+ "tags": [
+ "User API"
+ ],
+ "description": "get user",
+ "operationId": "ApiController.GetUser",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "id",
+ "description": "The id ( owner/name ) of the user",
+ "type": "string"
+ },
+ {
+ "in": "query",
+ "name": "owner",
+ "description": "The owner of the user",
+ "type": "string"
+ },
+ {
+ "in": "query",
+ "name": "email",
+ "description": "The email of the user",
+ "type": "string"
+ },
+ {
+ "in": "query",
+ "name": "phone",
+ "description": "The phone of the user",
+ "type": "string"
+ },
+ {
+ "in": "query",
+ "name": "userId",
+ "description": "The userId of the user",
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/object.User"
+ }
+ }
+ }
+ }
+ },
+ "/api/get-user-application": {
+ "get": {
+ "tags": [
+ "Application API"
+ ],
+ "description": "get the detail of the user's application",
+ "operationId": "ApiController.GetUserApplication",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "id",
+ "description": "The id ( owner/name ) of the user",
+ "required": true,
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/object.Application"
+ }
+ }
+ }
+ }
+ },
+ "/api/get-user-count": {
+ "get": {
+ "tags": [
+ "User API"
+ ],
+ "operationId": "ApiController.GetUserCount",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "owner",
+ "description": "The owner of users",
+ "required": true,
+ "type": "string"
+ },
+ {
+ "in": "query",
+ "name": "isOnline",
+ "description": "The filter for query, 1 for online, 0 for offline, empty string for all users",
+ "required": true,
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "{int} int The count of filtered users for an organization"
+ }
+ }
+ }
+ },
+ "/api/get-user-orders": {
+ "get": {
+ "tags": [
+ "Order API"
+ ],
+ "description": "get orders for a user",
+ "operationId": "ApiController.GetUserOrders",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "owner",
+ "description": "The owner of orders",
+ "required": true,
+ "type": "string"
+ },
+ {
+ "in": "query",
+ "name": "user",
+ "description": "The username of the user",
+ "required": true,
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/object.Order"
+ }
+ }
+ }
+ }
+ }
+ },
+ "/api/get-user-payments": {
+ "get": {
+ "tags": [
+ "Verification API"
+ ],
+ "description": "get payments for a user",
+ "operationId": "ApiController.GetUserVerifications",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "owner",
+ "description": "The owner of payments",
+ "required": true,
+ "type": "string"
+ },
+ {
+ "in": "query",
+ "name": "organization",
+ "description": "The organization of the user",
+ "required": true,
+ "type": "string"
+ },
+ {
+ "in": "query",
+ "name": "user",
+ "description": "The username of the user",
+ "required": true,
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/object.Verification"
+ }
+ }
+ }
+ }
+ }
+ },
+ "/api/get-users": {
+ "get": {
+ "tags": [
+ "User API"
+ ],
+ "operationId": "ApiController.GetUsers",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "owner",
+ "description": "The owner of users",
+ "required": true,
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/object.User"
+ }
+ }
+ }
+ }
+ }
+ },
+ "/api/get-version-info": {
+ "get": {
+ "tags": [
+ "System API"
+ ],
+ "description": "get version info like Casdoor release version and commit ID",
+ "operationId": "ApiController.GetVersionInfo",
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/util.VersionInfo"
+ }
+ }
+ }
+ }
+ },
+ "/api/get-webhook": {
+ "get": {
+ "tags": [
+ "Webhook API"
+ ],
+ "description": "get webhook",
+ "operationId": "ApiController.GetWebhook",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "id",
+ "description": "The id ( owner/name ) of the webhook",
+ "required": true,
+ "type": "string",
+ "default": "built-in/admin"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/object.Webhook"
+ }
+ }
+ }
+ }
+ },
+ "/api/get-webhook-event": {
+ "get": {
+ "tags": [
+ "System API"
+ ],
+ "operationId": "ApiController.GetWebhookEventType",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "ticket",
+ "description": "The eventId of QRCode",
+ "required": true,
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/get-webhooks": {
+ "get": {
+ "tags": [
+ "Webhook API"
+ ],
+ "description": "get webhooks",
+ "operationId": "ApiController.GetWebhooks",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "owner",
+ "description": "The owner of webhooks",
+ "required": true,
+ "type": "string",
+ "default": "built-in/admin"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/object.Webhook"
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "test_apiKey": []
+ }
+ ]
+ }
+ },
+ "/api/health": {
+ "get": {
+ "tags": [
+ "System API"
+ ],
+ "description": "check if the system is live",
+ "operationId": "ApiController.Health",
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/impersonation-user": {
+ "post": {
+ "tags": [
+ "User API"
+ ],
+ "description": "set impersonation user for current admin session",
+ "operationId": "ApiController.ImpersonateUser",
+ "parameters": [
+ {
+ "in": "formData",
+ "name": "username",
+ "description": "The username to impersonate (owner/name)",
+ "required": true,
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/invoice-payment": {
+ "post": {
+ "tags": [
+ "Payment API"
+ ],
+ "description": "invoice payment",
+ "operationId": "ApiController.InvoicePayment",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "id",
+ "description": "The id ( owner/name ) of the payment",
+ "required": true,
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/is-session-duplicated": {
+ "get": {
+ "tags": [
+ "Session API"
+ ],
+ "description": "Check if there are other different sessions for one user in one application.",
+ "operationId": "ApiController.IsSessionDuplicated",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "sessionPkId",
+ "description": "The session ID in format: organization/user/application (e.g., built-in/admin/app-built-in)",
+ "required": true,
+ "type": "string"
+ },
+ {
+ "in": "query",
+ "name": "sessionId",
+ "description": "The specific session ID to check",
+ "required": true,
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ },
+ "/api/login": {
+ "post": {
+ "tags": [
+ "Login API"
+ ],
+ "description": "login",
+ "operationId": "ApiController.Login",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "clientId",
+ "description": "clientId",
+ "required": true,
+ "type": "string"
+ },
+ {
+ "in": "query",
+ "name": "responseType",
+ "description": "responseType",
+ "required": true,
+ "type": "string"
+ },
+ {
+ "in": "query",
+ "name": "redirectUri",
+ "description": "redirectUri",
+ "required": true,
+ "type": "string"
+ },
+ {
+ "in": "query",
+ "name": "scope",
+ "description": "scope",
+ "type": "string"
+ },
+ {
+ "in": "query",
+ "name": "state",
+ "description": "state",
+ "type": "string"
+ },
+ {
+ "in": "query",
+ "name": "nonce",
+ "description": "nonce",
+ "type": "string"
+ },
+ {
+ "in": "query",
+ "name": "code_challenge_method",
+ "description": "code_challenge_method",
+ "type": "string"
+ },
+ {
+ "in": "query",
+ "name": "code_challenge",
+ "description": "code_challenge",
+ "type": "string"
+ },
+ {
+ "in": "body",
+ "name": "form",
+ "description": "Login information",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/controllers.AuthForm"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/login/oauth/access_token": {
+ "post": {
+ "tags": [
+ "Token API"
+ ],
+ "description": "get OAuth access token",
+ "operationId": "ApiController.GetOAuthToken",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "grant_type",
+ "description": "OAuth grant type",
+ "required": true,
+ "type": "string"
+ },
+ {
+ "in": "query",
+ "name": "client_id",
+ "description": "OAuth client id",
+ "required": true,
+ "type": "string"
+ },
+ {
+ "in": "query",
+ "name": "client_secret",
+ "description": "OAuth client secret",
+ "required": true,
+ "type": "string"
+ },
+ {
+ "in": "query",
+ "name": "code",
+ "description": "OAuth code",
+ "required": true,
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/object.TokenWrapper"
+ }
+ },
+ "400": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/object.TokenError"
+ }
+ },
+ "401": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/object.TokenError"
+ }
+ }
+ }
+ }
+ },
+ "/api/login/oauth/introspect": {
+ "post": {
+ "tags": [
+ "Login API"
+ ],
+ "description": "The introspection endpoint is an OAuth 2.0 endpoint that takes a",
+ "operationId": "ApiController.IntrospectToken",
+ "parameters": [
+ {
+ "in": "formData",
+ "name": "token",
+ "description": "access_token's value or refresh_token's value",
+ "required": true,
+ "type": "string"
+ },
+ {
+ "in": "formData",
+ "name": "token_type_hint",
+ "description": "the token type access_token or refresh_token",
+ "required": true,
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/object.IntrospectionResponse"
+ }
+ },
+ "400": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/object.TokenError"
+ }
+ },
+ "401": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/object.TokenError"
+ }
+ }
+ }
+ }
+ },
+ "/api/login/oauth/refresh_token": {
+ "post": {
+ "tags": [
+ "Token API"
+ ],
+ "description": "refresh OAuth access token",
+ "operationId": "ApiController.RefreshToken",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "grant_type",
+ "description": "OAuth grant type",
+ "required": true,
+ "type": "string"
+ },
+ {
+ "in": "query",
+ "name": "refresh_token",
+ "description": "OAuth refresh token",
+ "required": true,
+ "type": "string"
+ },
+ {
+ "in": "query",
+ "name": "scope",
+ "description": "OAuth scope",
+ "required": true,
+ "type": "string"
+ },
+ {
+ "in": "query",
+ "name": "client_id",
+ "description": "OAuth client id",
+ "required": true,
+ "type": "string"
+ },
+ {
+ "in": "query",
+ "name": "client_secret",
+ "description": "OAuth client secret",
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/object.TokenWrapper"
+ }
+ },
+ "400": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/object.TokenError"
+ }
+ },
+ "401": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/object.TokenError"
+ }
+ }
+ }
+ }
+ },
+ "/api/logout": {
+ "post": {
+ "tags": [
+ "Login API"
+ ],
+ "description": "logout the current user",
+ "operationId": "ApiController.Logout",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "id_token_hint",
+ "description": "id_token_hint",
+ "type": "string"
+ },
+ {
+ "in": "query",
+ "name": "post_logout_redirect_uri",
+ "description": "post_logout_redirect_uri",
+ "type": "string"
+ },
+ {
+ "in": "query",
+ "name": "state",
+ "description": "state",
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/metrics": {
+ "get": {
+ "tags": [
+ "System API"
+ ],
+ "description": "get Prometheus metrics",
+ "operationId": "ApiController.GetMetrics",
+ "responses": {
+ "200": {
+ "description": "{string} Prometheus metrics in text format"
+ }
+ }
+ }
+ },
+ "/api/mfa/setup/enable": {
+ "post": {
+ "tags": [
+ "MFA API"
+ ],
+ "description": "enable totp",
+ "operationId": "ApiController.MfaSetupEnable",
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/mfa/setup/initiate": {
+ "post": {
+ "tags": [
+ "MFA API"
+ ],
+ "description": "setup MFA",
+ "operationId": "ApiController.MfaSetupInitiate",
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/mfa/setup/verify": {
+ "post": {
+ "tags": [
+ "MFA API"
+ ],
+ "description": "setup verify totp",
+ "operationId": "ApiController.MfaSetupVerify",
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/notify-payment": {
+ "post": {
+ "tags": [
+ "Payment API"
+ ],
+ "description": "notify payment",
+ "operationId": "ApiController.NotifyPayment",
+ "parameters": [
+ {
+ "in": "body",
+ "name": "body",
+ "description": "The details of the payment",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/object.Payment"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/pay-order": {
+ "post": {
+ "tags": [
+ "Order API"
+ ],
+ "description": "pay an existing order",
+ "operationId": "ApiController.PayOrder",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "id",
+ "description": "The id ( owner/name ) of the order",
+ "required": true,
+ "type": "string"
+ },
+ {
+ "in": "query",
+ "name": "providerName",
+ "description": "The name of the provider",
+ "required": true,
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/place-order": {
+ "post": {
+ "tags": [
+ "Order API"
+ ],
+ "description": "place an order for a product",
+ "operationId": "ApiController.PlaceOrder",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "productId",
+ "description": "The id ( owner/name ) of the product",
+ "required": true,
+ "type": "string"
+ },
+ {
+ "in": "query",
+ "name": "pricingName",
+ "description": "The name of the pricing (for subscription)",
+ "type": "string"
+ },
+ {
+ "in": "query",
+ "name": "planName",
+ "description": "The name of the plan (for subscription)",
+ "type": "string"
+ },
+ {
+ "in": "query",
+ "name": "customPrice",
+ "description": "Custom price for recharge products",
+ "type": "number"
+ },
+ {
+ "in": "query",
+ "name": "userName",
+ "description": "The username to place order for (admin only)",
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/object.Order"
+ }
+ }
+ }
+ }
+ },
+ "/api/refresh-engines": {
+ "post": {
+ "tags": [
+ "CLI API"
+ ],
+ "description": "Refresh all CLI engines",
+ "operationId": "ApiController.RefreshEngines",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "m",
+ "description": "Hash for request validation",
+ "required": true,
+ "type": "string"
+ },
+ {
+ "in": "query",
+ "name": "t",
+ "description": "Timestamp for request validation",
+ "required": true,
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/remove-policy": {
+ "post": {
+ "tags": [
+ "Enforcer API"
+ ],
+ "description": "remove policy",
+ "operationId": "ApiController.RemovePolicy",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "id",
+ "description": "The id ( owner/name ) of enforcer",
+ "required": true,
+ "type": "string"
+ },
+ {
+ "in": "body",
+ "name": "body",
+ "description": "The policy to remove",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/xormadapter.CasbinRule"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "",
+ "schema": {
+ "$ref": "#/definitions/Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/reset-email-or-phone": {
+ "post": {
+ "tags": [
+ "Account API"
+ ],
+ "operationId": "ApiController.ResetEmailOrPhone",
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/object.Userinfo"
+ }
+ }
+ }
+ }
+ },
+ "/api/run-casbin-command": {
+ "get": {
+ "tags": [
+ "Enforcer API"
+ ],
+ "description": "Call Casbin CLI commands",
+ "operationId": "ApiController.RunCasbinCommand",
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/run-syncer": {
+ "get": {
+ "tags": [
+ "Syncer API"
+ ],
+ "description": "run syncer",
+ "operationId": "ApiController.RunSyncer",
+ "parameters": [
+ {
+ "in": "body",
+ "name": "body",
+ "description": "The details of the syncer",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/object.Syncer"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/send-email": {
+ "post": {
+ "tags": [
+ "Service API"
+ ],
+ "description": "This API is not for Casdoor frontend to call, it is for Casdoor SDKs.",
+ "operationId": "ApiController.SendEmail",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "clientId",
+ "description": "The clientId of the application",
+ "required": true,
+ "type": "string"
+ },
+ {
+ "in": "query",
+ "name": "clientSecret",
+ "description": "The clientSecret of the application",
+ "required": true,
+ "type": "string"
+ },
+ {
+ "in": "body",
+ "name": "from",
+ "description": "Details of the email request",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/controllers.EmailForm"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/send-invitation": {
+ "post": {
+ "tags": [
+ "Invitation API"
+ ],
+ "description": "verify invitation",
+ "operationId": "ApiController.VerifyInvitation",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "id",
+ "description": "The id ( owner/name ) of the invitation",
+ "required": true,
+ "type": "string"
+ },
+ {
+ "in": "body",
+ "name": "body",
+ "description": "The details of the invitation",
+ "required": true,
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/send-notification": {
+ "post": {
+ "tags": [
+ "Service API"
+ ],
+ "description": "This API is not for Casdoor frontend to call, it is for Casdoor SDKs.",
+ "operationId": "ApiController.SendNotification",
+ "parameters": [
+ {
+ "in": "body",
+ "name": "from",
+ "description": "Details of the notification request",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/controllers.NotificationForm"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/send-sms": {
+ "post": {
+ "tags": [
+ "Service API"
+ ],
+ "description": "This API is not for Casdoor frontend to call, it is for Casdoor SDKs.",
+ "operationId": "ApiController.SendSms",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "clientId",
+ "description": "The clientId of the application",
+ "required": true,
+ "type": "string"
+ },
+ {
+ "in": "query",
+ "name": "clientSecret",
+ "description": "The clientSecret of the application",
+ "required": true,
+ "type": "string"
+ },
+ {
+ "in": "body",
+ "name": "from",
+ "description": "Details of the sms request",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/controllers.SmsForm"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/send-verification-code": {
+ "post": {
+ "tags": [
+ "Verification API"
+ ],
+ "operationId": "ApiController.SendVerificationCode",
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/object.Userinfo"
+ }
+ }
+ }
+ }
+ },
+ "/api/set-password": {
+ "post": {
+ "tags": [
+ "Account API"
+ ],
+ "description": "set password",
+ "operationId": "ApiController.SetPassword",
+ "parameters": [
+ {
+ "in": "formData",
+ "name": "userOwner",
+ "description": "The owner of the user",
+ "required": true,
+ "type": "string"
+ },
+ {
+ "in": "formData",
+ "name": "userName",
+ "description": "The name of the user",
+ "required": true,
+ "type": "string"
+ },
+ {
+ "in": "formData",
+ "name": "oldPassword",
+ "description": "The old password of the user",
+ "required": true,
+ "type": "string"
+ },
+ {
+ "in": "formData",
+ "name": "newPassword",
+ "description": "The new password of the user",
+ "required": true,
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/set-preferred-mfa": {
+ "post": {
+ "tags": [
+ "MFA API"
+ ],
+ "description": ": Set specific Mfa Preferred",
+ "operationId": "ApiController.SetPreferredMfa",
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/signup": {
+ "post": {
+ "tags": [
+ "Login API"
+ ],
+ "description": "sign up a new user",
+ "operationId": "ApiController.Signup",
+ "parameters": [
+ {
+ "in": "formData",
+ "name": "username",
+ "description": "The username to sign up",
+ "required": true,
+ "type": "string"
+ },
+ {
+ "in": "formData",
+ "name": "password",
+ "description": "The password",
+ "required": true,
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/sso-logout": {
+ "get": {
+ "tags": [
+ "Login API"
+ ],
+ "description": "logout the current user from all applications or current session only",
+ "operationId": "ApiController.SsoLogout",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "logoutAll",
+ "description": "Whether to logout from all sessions. Accepted values: 'true', '1', or empty (default: true). Any other value means false.",
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ },
+ "post": {
+ "tags": [
+ "Login API"
+ ],
+ "description": "logout the current user from all applications or current session only",
+ "operationId": "ApiController.SsoLogout",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "logoutAll",
+ "description": "Whether to logout from all sessions. Accepted values: 'true', '1', or empty (default: true). Any other value means false.",
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/sync-ldap-users": {
+ "post": {
+ "tags": [
+ "Account API"
+ ],
+ "description": "sync ldap users",
+ "operationId": "ApiController.SyncLdapUsers",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "id",
+ "description": "id",
+ "required": true,
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.LdapSyncResp"
+ }
+ }
+ }
+ }
+ },
+ "/api/unlink": {
+ "post": {
+ "tags": [
+ "Login API"
+ ],
+ "operationId": "ApiController.Unlink",
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/object.Userinfo"
+ }
+ }
+ }
+ }
+ },
+ "/api/update-adapter": {
+ "post": {
+ "tags": [
+ "Adapter API"
+ ],
+ "description": "update adapter",
+ "operationId": "ApiController.UpdateAdapter",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "id",
+ "description": "The id ( owner/name ) of the adapter",
+ "required": true,
+ "type": "string"
+ },
+ {
+ "in": "body",
+ "name": "body",
+ "description": "The details of the adapter",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/object.Adapter"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/update-application": {
+ "post": {
+ "tags": [
+ "Application API"
+ ],
+ "description": "update an application",
+ "operationId": "ApiController.UpdateApplication",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "id",
+ "description": "The id ( owner/name ) of the application",
+ "required": true,
+ "type": "string"
+ },
+ {
+ "in": "body",
+ "name": "body",
+ "description": "The details of the application",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/object.Application"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/update-cert": {
+ "post": {
+ "tags": [
+ "Cert API"
+ ],
+ "description": "update cert",
+ "operationId": "ApiController.UpdateCert",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "id",
+ "description": "The id ( owner/name ) of the cert",
+ "required": true,
+ "type": "string"
+ },
+ {
+ "in": "body",
+ "name": "body",
+ "description": "The details of the cert",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/object.Cert"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/update-enforcer": {
+ "post": {
+ "tags": [
+ "Enforcer API"
+ ],
+ "description": "update enforcer",
+ "operationId": "ApiController.UpdateEnforcer",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "id",
+ "description": "The id ( owner/name ) of enforcer",
+ "required": true,
+ "type": "string"
+ },
+ {
+ "in": "body",
+ "name": "enforcer",
+ "description": "The enforcer object",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/object"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "",
+ "schema": {
+ "$ref": "#/definitions/object.Enforcer"
+ }
+ }
+ }
+ }
+ },
+ "/api/update-form": {
+ "post": {
+ "tags": [
+ "Form API"
+ ],
+ "description": "update form",
+ "operationId": "ApiController.UpdateForm",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "id",
+ "description": "The id (owner/name) of the form",
+ "required": true,
+ "type": "string"
+ },
+ {
+ "in": "body",
+ "name": "body",
+ "description": "The details of the form",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/object.Form"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/update-group": {
+ "post": {
+ "tags": [
+ "Group API"
+ ],
+ "description": "update group",
+ "operationId": "ApiController.UpdateGroup",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "id",
+ "description": "The id ( owner/name ) of the group",
+ "required": true,
+ "type": "string"
+ },
+ {
+ "in": "body",
+ "name": "body",
+ "description": "The details of the group",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/object.Group"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/update-invitation": {
+ "post": {
+ "tags": [
+ "Invitation API"
+ ],
+ "description": "update invitation",
+ "operationId": "ApiController.UpdateInvitation",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "id",
+ "description": "The id ( owner/name ) of the invitation",
+ "required": true,
+ "type": "string"
+ },
+ {
+ "in": "body",
+ "name": "body",
+ "description": "The details of the invitation",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/object.Invitation"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/update-ldap": {
+ "post": {
+ "tags": [
+ "Account API"
+ ],
+ "description": "update ldap",
+ "operationId": "ApiController.UpdateLdap",
+ "parameters": [
+ {
+ "in": "body",
+ "name": "body",
+ "description": "The details of the ldap",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/object.Ldap"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/update-model": {
+ "post": {
+ "tags": [
+ "Model API"
+ ],
+ "description": "update model",
+ "operationId": "ApiController.UpdateModel",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "id",
+ "description": "The id ( owner/name ) of the model",
+ "required": true,
+ "type": "string"
+ },
+ {
+ "in": "body",
+ "name": "body",
+ "description": "The details of the model",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/object.Model"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/update-order": {
+ "post": {
+ "tags": [
+ "Order API"
+ ],
+ "description": "update order",
+ "operationId": "ApiController.UpdateOrder",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "id",
+ "description": "The id ( owner/name ) of the order",
+ "required": true,
+ "type": "string"
+ },
+ {
+ "in": "body",
+ "name": "body",
+ "description": "The details of the order",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/object.Order"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/update-organization": {
+ "post": {
+ "tags": [
+ "Organization API"
+ ],
+ "description": "update organization",
+ "operationId": "ApiController.UpdateOrganization",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "id",
+ "description": "The id ( owner/name ) of the organization",
+ "required": true,
+ "type": "string"
+ },
+ {
+ "in": "body",
+ "name": "body",
+ "description": "The details of the organization",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/object.Organization"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/update-payment": {
+ "post": {
+ "tags": [
+ "Payment API"
+ ],
+ "description": "update payment",
+ "operationId": "ApiController.UpdatePayment",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "id",
+ "description": "The id ( owner/name ) of the payment",
+ "required": true,
+ "type": "string"
+ },
+ {
+ "in": "body",
+ "name": "body",
+ "description": "The details of the payment",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/object.Payment"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/update-permission": {
+ "post": {
+ "tags": [
+ "Permission API"
+ ],
+ "description": "update permission",
+ "operationId": "ApiController.UpdatePermission",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "id",
+ "description": "The id ( owner/name ) of the permission",
+ "required": true,
+ "type": "string"
+ },
+ {
+ "in": "body",
+ "name": "body",
+ "description": "The details of the permission",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/object.Permission"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/update-plan": {
+ "post": {
+ "tags": [
+ "Plan API"
+ ],
+ "description": "update plan",
+ "operationId": "ApiController.UpdatePlan",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "id",
+ "description": "The id ( owner/name ) of the plan",
+ "required": true,
+ "type": "string"
+ },
+ {
+ "in": "body",
+ "name": "body",
+ "description": "The details of the plan",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/object.Plan"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/update-policy": {
+ "post": {
+ "tags": [
+ "Enforcer API"
+ ],
+ "description": "update policy",
+ "operationId": "ApiController.UpdatePolicy",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "id",
+ "description": "The id ( owner/name ) of enforcer",
+ "required": true,
+ "type": "string"
+ },
+ {
+ "in": "body",
+ "name": "body",
+ "description": "Array containing old and new policy",
+ "required": true,
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/xormadapter.CasbinRule"
+ }
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "",
+ "schema": {
+ "$ref": "#/definitions/Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/update-pricing": {
+ "post": {
+ "tags": [
+ "Pricing API"
+ ],
+ "description": "update pricing",
+ "operationId": "ApiController.UpdatePricing",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "id",
+ "description": "The id ( owner/name ) of the pricing",
+ "required": true,
+ "type": "string"
+ },
+ {
+ "in": "body",
+ "name": "body",
+ "description": "The details of the pricing",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/object.Pricing"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/update-product": {
+ "post": {
+ "tags": [
+ "Product API"
+ ],
+ "description": "update product",
+ "operationId": "ApiController.UpdateProduct",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "id",
+ "description": "The id ( owner/name ) of the product",
+ "required": true,
+ "type": "string"
+ },
+ {
+ "in": "body",
+ "name": "body",
+ "description": "The details of the product",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/object.Product"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/update-provider": {
+ "post": {
+ "tags": [
+ "Provider API"
+ ],
+ "description": "update provider",
+ "operationId": "ApiController.UpdateProvider",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "id",
+ "description": "The id ( owner/name ) of the provider",
+ "required": true,
+ "type": "string"
+ },
+ {
+ "in": "body",
+ "name": "body",
+ "description": "The details of the provider",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/object.Provider"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/update-resource": {
+ "post": {
+ "tags": [
+ "Resource API"
+ ],
+ "description": "get resource",
+ "operationId": "ApiController.UpdateResource",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "id",
+ "description": "The id ( owner/name ) of resource",
+ "required": true,
+ "type": "string"
+ },
+ {
+ "in": "body",
+ "name": "resource",
+ "description": "The resource object",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/object.Resource"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Success or error",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/update-role": {
+ "post": {
+ "tags": [
+ "Role API"
+ ],
+ "description": "update role",
+ "operationId": "ApiController.UpdateRole",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "id",
+ "description": "The id ( owner/name ) of the role",
+ "required": true,
+ "type": "string"
+ },
+ {
+ "in": "body",
+ "name": "body",
+ "description": "The details of the role",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/object.Role"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/update-session": {
+ "post": {
+ "tags": [
+ "Session API"
+ ],
+ "description": "Update session for one user in one application.",
+ "operationId": "ApiController.UpdateSession",
+ "parameters": [
+ {
+ "in": "body",
+ "name": "body",
+ "description": "The session object to update",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/object.Session"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/update-subscription": {
+ "post": {
+ "tags": [
+ "Subscription API"
+ ],
+ "description": "update subscription",
+ "operationId": "ApiController.UpdateSubscription",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "id",
+ "description": "The id ( owner/name ) of the subscription",
+ "required": true,
+ "type": "string"
+ },
+ {
+ "in": "body",
+ "name": "body",
+ "description": "The details of the subscription",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/object.Subscription"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/update-syncer": {
+ "post": {
+ "tags": [
+ "Syncer API"
+ ],
+ "description": "update syncer",
+ "operationId": "ApiController.UpdateSyncer",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "id",
+ "description": "The id ( owner/name ) of the syncer",
+ "required": true,
+ "type": "string"
+ },
+ {
+ "in": "body",
+ "name": "body",
+ "description": "The details of the syncer",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/object.Syncer"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/update-ticket": {
+ "post": {
+ "tags": [
+ "Ticket API"
+ ],
+ "description": "update ticket",
+ "operationId": "ApiController.UpdateTicket",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "id",
+ "description": "The id ( owner/name ) of the ticket",
+ "required": true,
+ "type": "string"
+ },
+ {
+ "in": "body",
+ "name": "body",
+ "description": "The details of the ticket",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/object.Ticket"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/update-token": {
+ "post": {
+ "tags": [
+ "Token API"
+ ],
+ "description": "update token",
+ "operationId": "ApiController.UpdateToken",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "id",
+ "description": "The token ID in format: organization/token-name (e.g., built-in/token-123456)",
+ "required": true,
+ "type": "string"
+ },
+ {
+ "in": "body",
+ "name": "body",
+ "description": "Details of the token",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/object.Token"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/update-transaction": {
+ "post": {
+ "tags": [
+ "Transaction API"
+ ],
+ "description": "update transaction",
+ "operationId": "ApiController.UpdateTransaction",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "id",
+ "description": "The id ( owner/name ) of the transaction",
+ "required": true,
+ "type": "string"
+ },
+ {
+ "in": "body",
+ "name": "body",
+ "description": "The details of the transaction",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/object.Transaction"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/update-user": {
+ "post": {
+ "tags": [
+ "User API"
+ ],
+ "description": "update user",
+ "operationId": "ApiController.UpdateUser",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "id",
+ "description": "The id ( owner/name ) of the user",
+ "type": "string"
+ },
+ {
+ "in": "query",
+ "name": "userId",
+ "description": "The userId (UUID) of the user",
+ "type": "string"
+ },
+ {
+ "in": "query",
+ "name": "owner",
+ "description": "The owner of the user (required when using userId)",
+ "type": "string"
+ },
+ {
+ "in": "body",
+ "name": "body",
+ "description": "The details of the user",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/object.User"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/update-webhook": {
+ "post": {
+ "tags": [
+ "Webhook API"
+ ],
+ "description": "update webhook",
+ "operationId": "ApiController.UpdateWebhook",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "id",
+ "description": "The id ( owner/name ) of the webhook",
+ "required": true,
+ "type": "string",
+ "default": "built-in/admin"
+ },
+ {
+ "in": "body",
+ "name": "body",
+ "description": "The details of the webhook",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/object.Webhook"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/upload-resource": {
+ "post": {
+ "tags": [
+ "Resource API"
+ ],
+ "operationId": "ApiController.UploadResource",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "owner",
+ "description": "Owner",
+ "required": true,
+ "type": "string"
+ },
+ {
+ "in": "query",
+ "name": "user",
+ "description": "User",
+ "required": true,
+ "type": "string"
+ },
+ {
+ "in": "query",
+ "name": "application",
+ "description": "Application",
+ "required": true,
+ "type": "string"
+ },
+ {
+ "in": "query",
+ "name": "tag",
+ "description": "Tag",
+ "type": "string"
+ },
+ {
+ "in": "query",
+ "name": "parent",
+ "description": "Parent",
+ "type": "string"
+ },
+ {
+ "in": "query",
+ "name": "fullFilePath",
+ "description": "Full File Path",
+ "required": true,
+ "type": "string"
+ },
+ {
+ "in": "query",
+ "name": "createdTime",
+ "description": "Created Time",
+ "type": "string"
+ },
+ {
+ "in": "query",
+ "name": "description",
+ "description": "Description",
+ "type": "string"
+ },
+ {
+ "in": "formData",
+ "name": "file",
+ "description": "Resource file",
+ "required": true,
+ "type": "file"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "FileUrl, objectKey",
+ "schema": {
+ "$ref": "#/definitions/object.Resource"
+ }
+ }
+ }
+ }
+ },
+ "/api/user": {
+ "get": {
+ "tags": [
+ "Account API"
+ ],
+ "description": "return Laravel compatible user information according to OAuth 2.0",
+ "operationId": "ApiController.UserInfo2",
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.LaravelResponse"
+ }
+ }
+ }
+ }
+ },
+ "/api/userinfo": {
+ "get": {
+ "tags": [
+ "Account API"
+ ],
+ "description": "return user information according to OIDC standards",
+ "operationId": "ApiController.UserInfo",
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/object.Userinfo"
+ }
+ }
+ }
+ }
+ },
+ "/api/verify-captcha": {
+ "post": {
+ "tags": [
+ "Verification API"
+ ],
+ "operationId": "ApiController.VerifyCaptcha",
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/object.Userinfo"
+ }
+ }
+ }
+ }
+ },
+ "/api/verify-code": {
+ "post": {
+ "tags": [
+ "Verification API"
+ ],
+ "operationId": "ApiController.VerifyCode",
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/object.Userinfo"
+ }
+ }
+ }
+ }
+ },
+ "/api/verify-identification": {
+ "post": {
+ "tags": [
+ "User API"
+ ],
+ "description": "verify user's real identity using ID Verification provider",
+ "operationId": "ApiController.VerifyIdentification",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "owner",
+ "description": "The owner of the user (optional, defaults to logged-in user)",
+ "type": "string"
+ },
+ {
+ "in": "query",
+ "name": "name",
+ "description": "The name of the user (optional, defaults to logged-in user)",
+ "type": "string"
+ },
+ {
+ "in": "query",
+ "name": "provider",
+ "description": "The name of the ID Verification provider (optional, auto-selected if not provided)",
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/verify-invitation": {
+ "get": {
+ "tags": [
+ "Invitation API"
+ ],
+ "description": "verify invitation",
+ "operationId": "ApiController.VerifyInvitation",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "id",
+ "description": "The id ( owner/name ) of the invitation",
+ "required": true,
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/webauthn/signin/begin": {
+ "get": {
+ "tags": [
+ "Login API"
+ ],
+ "description": "WebAuthn Login Flow 1st stage",
+ "operationId": "ApiController.WebAuthnSigninBegin",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "owner",
+ "description": "owner",
+ "required": true,
+ "type": "string"
+ },
+ {
+ "in": "query",
+ "name": "name",
+ "description": "name",
+ "required": true,
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The CredentialAssertion object",
+ "schema": {
+ "$ref": "#/definitions/protocol.CredentialAssertion"
+ }
+ }
+ }
+ }
+ },
+ "/api/webauthn/signin/finish": {
+ "post": {
+ "tags": [
+ "Login API"
+ ],
+ "description": "WebAuthn Login Flow 2nd stage",
+ "operationId": "ApiController.WebAuthnSigninFinish",
+ "parameters": [
+ {
+ "in": "body",
+ "name": "body",
+ "description": "authenticator assertion Response",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/protocol.CredentialAssertionResponse"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "\"The Response object\"",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/webauthn/signup/begin": {
+ "get": {
+ "tags": [
+ "User API"
+ ],
+ "description": "WebAuthn Registration Flow 1st stage",
+ "operationId": "ApiController.WebAuthnSignupBegin",
+ "responses": {
+ "200": {
+ "description": "The CredentialCreationOptions object",
+ "schema": {
+ "$ref": "#/definitions/protocol.CredentialCreation"
+ }
+ }
+ }
+ }
+ },
+ "/api/webauthn/signup/finish": {
+ "post": {
+ "tags": [
+ "User API"
+ ],
+ "description": "WebAuthn Registration Flow 2nd stage",
+ "operationId": "ApiController.WebAuthnSignupFinish",
+ "parameters": [
+ {
+ "in": "body",
+ "name": "body",
+ "description": "authenticator attestation Response",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/protocol.CredentialCreationResponse"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "\"The Response object\"",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/webhook": {
+ "post": {
+ "tags": [
+ "System API"
+ ],
+ "operationId": "ApiController.HandleOfficialAccountEvent",
+ "responses": {
+ "200": {
+ "description": "The Response object",
+ "schema": {
+ "$ref": "#/definitions/controllers.Response"
+ }
+ }
+ }
+ }
+ }
+ },
+ "definitions": {
+ "232967.\u003cnil\u003e.string": {
+ "title": "string",
+ "type": "object"
+ },
+ "233025.string.string": {
+ "title": "string",
+ "type": "object"
+ },
+ "McpResponse": {
+ "title": "McpResponse",
+ "type": "object"
+ },
+ "Response": {
+ "title": "Response",
+ "type": "object"
+ },
+ "casbin.Enforcer": {
+ "title": "Enforcer",
+ "type": "object"
+ },
+ "casvisorsdk.Record": {
+ "title": "Record",
+ "type": "object"
+ },
+ "controllers.AuthForm": {
+ "title": "AuthForm",
+ "type": "object"
+ },
+ "controllers.EmailForm": {
+ "title": "EmailForm",
+ "type": "object",
+ "properties": {
+ "content": {
+ "type": "string"
+ },
+ "provider": {
+ "type": "string"
+ },
+ "providerObject": {
+ "$ref": "#/definitions/object.Provider"
+ },
+ "receivers": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "sender": {
+ "type": "string"
+ },
+ "title": {
+ "type": "string"
+ }
+ }
+ },
+ "controllers.LaravelResponse": {
+ "title": "LaravelResponse",
+ "type": "object",
+ "properties": {
+ "created_at": {
+ "type": "string"
+ },
+ "email": {
+ "type": "string"
+ },
+ "email_verified_at": {
+ "type": "string"
+ },
+ "id": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ },
+ "updated_at": {
+ "type": "string"
+ }
+ }
+ },
+ "controllers.LdapResp": {
+ "title": "LdapResp",
+ "type": "object",
+ "properties": {
+ "existUuids": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "users": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/object.LdapUser"
+ }
+ }
+ }
+ },
+ "controllers.LdapSyncResp": {
+ "title": "LdapSyncResp",
+ "type": "object",
+ "properties": {
+ "exist": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/object.LdapUser"
+ }
+ },
+ "failed": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/object.LdapUser"
+ }
+ }
+ }
+ },
+ "controllers.NotificationForm": {
+ "title": "NotificationForm",
+ "type": "object",
+ "properties": {
+ "content": {
+ "type": "string"
+ }
+ }
+ },
+ "controllers.Response": {
+ "title": "Response",
+ "type": "object",
+ "properties": {
+ "data": {
+ "additionalProperties": {
+ "description": "support string, struct or []struct",
+ "type": "string"
+ }
+ },
+ "data2": {
+ "additionalProperties": {
+ "description": "support string, struct or []struct",
+ "type": "string"
+ }
+ },
+ "data3": {
+ "additionalProperties": {
+ "description": "support string, struct or []struct",
+ "type": "string"
+ }
+ },
+ "msg": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ },
+ "status": {
+ "type": "string"
+ },
+ "sub": {
+ "type": "string"
+ }
+ }
+ },
+ "controllers.SmsForm": {
+ "title": "SmsForm",
+ "type": "object",
+ "properties": {
+ "content": {
+ "type": "string"
+ },
+ "organizationId": {
+ "type": "string"
+ },
+ "receivers": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "jose.JSONWebKey": {
+ "title": "JSONWebKey",
+ "type": "object"
+ },
+ "model.Model": {
+ "title": "Model",
+ "type": "object"
+ },
+ "object": {
+ "title": "object",
+ "type": "object"
+ },
+ "object.AccountItem": {
+ "title": "AccountItem",
+ "type": "object",
+ "properties": {
+ "modifyRule": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ },
+ "regex": {
+ "type": "string"
+ },
+ "tab": {
+ "type": "string"
+ },
+ "viewRule": {
+ "type": "string"
+ },
+ "visible": {
+ "type": "boolean"
+ }
+ }
+ },
+ "object.Adapter": {
+ "title": "Adapter",
+ "type": "object",
+ "properties": {
+ "createdTime": {
+ "type": "string"
+ },
+ "database": {
+ "type": "string"
+ },
+ "databaseType": {
+ "type": "string"
+ },
+ "host": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ },
+ "owner": {
+ "type": "string"
+ },
+ "password": {
+ "type": "string"
+ },
+ "port": {
+ "type": "integer",
+ "format": "int64"
+ },
+ "table": {
+ "type": "string"
+ },
+ "type": {
+ "type": "string"
+ },
+ "useSameDb": {
+ "type": "boolean"
+ },
+ "user": {
+ "type": "string"
+ }
+ }
+ },
+ "object.Address": {
+ "title": "Address",
+ "type": "object",
+ "properties": {
+ "city": {
+ "type": "string"
+ },
+ "line1": {
+ "type": "string"
+ },
+ "line2": {
+ "type": "string"
+ },
+ "region": {
+ "type": "string"
+ },
+ "state": {
+ "type": "string"
+ },
+ "tag": {
+ "type": "string"
+ },
+ "zipCode": {
+ "type": "string"
+ }
+ }
+ },
+ "object.Application": {
+ "title": "Application",
+ "type": "object",
+ "properties": {
+ "affiliationUrl": {
+ "type": "string"
+ },
+ "cert": {
+ "type": "string"
+ },
+ "certPublicKey": {
+ "type": "string"
+ },
+ "clientId": {
+ "type": "string"
+ },
+ "clientSecret": {
+ "type": "string"
+ },
+ "codeResendTimeout": {
+ "type": "integer",
+ "format": "int64"
+ },
+ "cookieExpireInHours": {
+ "type": "integer",
+ "format": "int64"
+ },
+ "createdTime": {
+ "type": "string"
+ },
+ "defaultGroup": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "disableSamlAttributes": {
+ "type": "boolean"
+ },
+ "disableSignin": {
+ "type": "boolean"
+ },
+ "displayName": {
+ "type": "string"
+ },
+ "enableAutoSignin": {
+ "type": "boolean"
+ },
+ "enableCodeSignin": {
+ "type": "boolean"
+ },
+ "enableExclusiveSignin": {
+ "type": "boolean"
+ },
+ "enableLinkWithEmail": {
+ "type": "boolean"
+ },
+ "enablePassword": {
+ "type": "boolean"
+ },
+ "enableSamlAssertionSignature": {
+ "type": "boolean"
+ },
+ "enableSamlC14n10": {
+ "type": "boolean"
+ },
+ "enableSamlCompress": {
+ "type": "boolean"
+ },
+ "enableSamlPostBinding": {
+ "type": "boolean"
+ },
+ "enableSignUp": {
+ "type": "boolean"
+ },
+ "enableSigninSession": {
+ "type": "boolean"
+ },
+ "enableWebAuthn": {
+ "type": "boolean"
+ },
+ "expireInHours": {
+ "type": "number",
+ "format": "double"
+ },
+ "failedSigninFrozenTime": {
+ "type": "integer",
+ "format": "int64"
+ },
+ "failedSigninLimit": {
+ "type": "integer",
+ "format": "int64"
+ },
+ "favicon": {
+ "type": "string"
+ },
+ "footerHtml": {
+ "type": "string"
+ },
+ "forcedRedirectOrigin": {
+ "type": "string"
+ },
+ "forgetUrl": {
+ "type": "string"
+ },
+ "formBackgroundUrl": {
+ "type": "string"
+ },
+ "formBackgroundUrlMobile": {
+ "type": "string"
+ },
+ "formCss": {
+ "type": "string"
+ },
+ "formCssMobile": {
+ "type": "string"
+ },
+ "formOffset": {
+ "type": "integer",
+ "format": "int64"
+ },
+ "formSideHtml": {
+ "type": "string"
+ },
+ "grantTypes": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "headerHtml": {
+ "type": "string"
+ },
+ "homepageUrl": {
+ "type": "string"
+ },
+ "ipRestriction": {
+ "type": "string"
+ },
+ "ipWhitelist": {
+ "type": "string"
+ },
+ "isShared": {
+ "type": "boolean"
+ },
+ "logo": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ },
+ "order": {
+ "type": "integer",
+ "format": "int64"
+ },
+ "orgChoiceMode": {
+ "type": "string"
+ },
+ "organization": {
+ "type": "string"
+ },
+ "organizationObj": {
+ "$ref": "#/definitions/object.Organization"
+ },
+ "owner": {
+ "type": "string"
+ },
+ "providers": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/object.ProviderItem"
+ }
+ },
+ "redirectUris": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "refreshExpireInHours": {
+ "type": "number",
+ "format": "double"
+ },
+ "samlAttributes": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/object.SamlItem"
+ }
+ },
+ "samlHashAlgorithm": {
+ "type": "string"
+ },
+ "samlReplyUrl": {
+ "type": "string"
+ },
+ "signinHtml": {
+ "type": "string"
+ },
+ "signinItems": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/object.SigninItem"
+ }
+ },
+ "signinMethods": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/object.SigninMethod"
+ }
+ },
+ "signinUrl": {
+ "type": "string"
+ },
+ "signupHtml": {
+ "type": "string"
+ },
+ "signupItems": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/object.SignupItem"
+ }
+ },
+ "signupUrl": {
+ "type": "string"
+ },
+ "tags": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "termsOfUse": {
+ "type": "string"
+ },
+ "themeData": {
+ "$ref": "#/definitions/object.ThemeData"
+ },
+ "title": {
+ "type": "string"
+ },
+ "tokenAttributes": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/object.JwtItem"
+ }
+ },
+ "tokenFields": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "tokenFormat": {
+ "type": "string"
+ },
+ "tokenSigningMethod": {
+ "type": "string"
+ },
+ "useEmailAsSamlNameId": {
+ "type": "boolean"
+ }
+ }
+ },
+ "object.Cert": {
+ "title": "Cert",
+ "type": "object",
+ "properties": {
+ "bitSize": {
+ "type": "integer",
+ "format": "int64"
+ },
+ "certificate": {
+ "type": "string"
+ },
+ "createdTime": {
+ "type": "string"
+ },
+ "cryptoAlgorithm": {
+ "type": "string"
+ },
+ "displayName": {
+ "type": "string"
+ },
+ "expireInYears": {
+ "type": "integer",
+ "format": "int64"
+ },
+ "name": {
+ "type": "string"
+ },
+ "owner": {
+ "type": "string"
+ },
+ "privateKey": {
+ "type": "string"
+ },
+ "scope": {
+ "type": "string"
+ },
+ "type": {
+ "type": "string"
+ }
+ }
+ },
+ "object.DeviceAuthResponse": {
+ "title": "DeviceAuthResponse",
+ "type": "object",
+ "properties": {
+ "device_code": {
+ "type": "string"
+ },
+ "expires_in": {
+ "type": "integer",
+ "format": "int64"
+ },
+ "interval": {
+ "type": "integer",
+ "format": "int64"
+ },
+ "user_code": {
+ "type": "string"
+ },
+ "verification_uri": {
+ "type": "string"
+ }
+ }
+ },
+ "object.Enforcer": {
+ "title": "Enforcer",
+ "type": "object",
+ "properties": {
+ "adapter": {
+ "type": "string"
+ },
+ "createdTime": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "displayName": {
+ "type": "string"
+ },
+ "model": {
+ "type": "string"
+ },
+ "modelCfg": {
+ "additionalProperties": {
+ "type": "string"
+ }
+ },
+ "name": {
+ "type": "string"
+ },
+ "owner": {
+ "type": "string"
+ },
+ "updatedTime": {
+ "type": "string"
+ }
+ }
+ },
+ "object.FaceId": {
+ "title": "FaceId",
+ "type": "object",
+ "properties": {
+ "ImageUrl": {
+ "type": "string"
+ },
+ "faceIdData": {
+ "type": "array",
+ "items": {
+ "type": "number",
+ "format": "double"
+ }
+ },
+ "name": {
+ "type": "string"
+ }
+ }
+ },
+ "object.Filter": {
+ "title": "Filter",
+ "type": "object",
+ "properties": {
+ "fieldIndex": {
+ "type": "integer",
+ "format": "int64"
+ },
+ "fieldValues": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "ptype": {
+ "type": "string"
+ }
+ }
+ },
+ "object.Form": {
+ "title": "Form",
+ "type": "object",
+ "properties": {
+ "createdTime": {
+ "type": "string"
+ },
+ "displayName": {
+ "type": "string"
+ },
+ "formItems": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/object.FormItem"
+ }
+ },
+ "name": {
+ "type": "string"
+ },
+ "owner": {
+ "type": "string"
+ },
+ "tag": {
+ "type": "string"
+ },
+ "type": {
+ "type": "string"
+ }
+ }
+ },
+ "object.FormItem": {
+ "title": "FormItem",
+ "type": "object",
+ "properties": {
+ "label": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ },
+ "visible": {
+ "type": "boolean"
+ },
+ "width": {
+ "type": "string"
+ }
+ }
+ },
+ "object.GaugeVecInfo": {
+ "title": "GaugeVecInfo",
+ "type": "object",
+ "properties": {
+ "method": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ },
+ "throughput": {
+ "type": "number",
+ "format": "double"
+ }
+ }
+ },
+ "object.Group": {
+ "title": "Group",
+ "type": "object",
+ "properties": {
+ "children": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/object.Group"
+ }
+ },
+ "contactEmail": {
+ "type": "string"
+ },
+ "createdTime": {
+ "type": "string"
+ },
+ "displayName": {
+ "type": "string"
+ },
+ "haveChildren": {
+ "type": "boolean"
+ },
+ "isEnabled": {
+ "type": "boolean"
+ },
+ "isTopGroup": {
+ "type": "boolean"
+ },
+ "key": {
+ "type": "string"
+ },
+ "manager": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ },
+ "owner": {
+ "type": "string"
+ },
+ "parentId": {
+ "type": "string"
+ },
+ "parentName": {
+ "type": "string"
+ },
+ "title": {
+ "type": "string"
+ },
+ "type": {
+ "type": "string"
+ },
+ "updatedTime": {
+ "type": "string"
+ },
+ "users": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "object.Header": {
+ "title": "Header",
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "value": {
+ "type": "string"
+ }
+ }
+ },
+ "object.HistogramVecInfo": {
+ "title": "HistogramVecInfo",
+ "type": "object",
+ "properties": {
+ "count": {
+ "type": "integer",
+ "format": "int64"
+ },
+ "latency": {
+ "type": "string"
+ },
+ "method": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ }
+ }
+ },
+ "object.IntrospectionResponse": {
+ "title": "IntrospectionResponse",
+ "type": "object",
+ "properties": {
+ "active": {
+ "type": "boolean"
+ },
+ "aud": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "client_id": {
+ "type": "string"
+ },
+ "exp": {
+ "type": "integer",
+ "format": "int64"
+ },
+ "iat": {
+ "type": "integer",
+ "format": "int64"
+ },
+ "iss": {
+ "type": "string"
+ },
+ "jti": {
+ "type": "string"
+ },
+ "nbf": {
+ "type": "integer",
+ "format": "int64"
+ },
+ "scope": {
+ "type": "string"
+ },
+ "sub": {
+ "type": "string"
+ },
+ "token_type": {
+ "type": "string"
+ },
+ "username": {
+ "type": "string"
+ }
+ }
+ },
+ "object.Invitation": {
+ "title": "Invitation",
+ "type": "object",
+ "properties": {
+ "application": {
+ "type": "string"
+ },
+ "code": {
+ "type": "string"
+ },
+ "createdTime": {
+ "type": "string"
+ },
+ "defaultCode": {
+ "type": "string"
+ },
+ "displayName": {
+ "type": "string"
+ },
+ "email": {
+ "type": "string"
+ },
+ "isRegexp": {
+ "type": "boolean"
+ },
+ "name": {
+ "type": "string"
+ },
+ "owner": {
+ "type": "string"
+ },
+ "phone": {
+ "type": "string"
+ },
+ "quota": {
+ "type": "integer",
+ "format": "int64"
+ },
+ "signupGroup": {
+ "type": "string"
+ },
+ "state": {
+ "type": "string"
+ },
+ "updatedTime": {
+ "type": "string"
+ },
+ "usedCount": {
+ "type": "integer",
+ "format": "int64"
+ },
+ "username": {
+ "type": "string"
+ }
+ }
+ },
+ "object.JwtItem": {
+ "title": "JwtItem",
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "type": {
+ "type": "string"
+ },
+ "value": {
+ "type": "string"
+ }
+ }
+ },
+ "object.Ldap": {
+ "title": "Ldap",
+ "type": "object",
+ "properties": {
+ "allowSelfSignedCert": {
+ "type": "boolean"
+ },
+ "autoSync": {
+ "type": "integer",
+ "format": "int64"
+ },
+ "baseDn": {
+ "type": "string"
+ },
+ "createdTime": {
+ "type": "string"
+ },
+ "customAttributes": {
+ "additionalProperties": {
+ "type": "string"
+ }
+ },
+ "defaultGroup": {
+ "type": "string"
+ },
+ "enableSsl": {
+ "type": "boolean"
+ },
+ "filter": {
+ "type": "string"
+ },
+ "filterFields": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "host": {
+ "type": "string"
+ },
+ "id": {
+ "type": "string"
+ },
+ "lastSync": {
+ "type": "string"
+ },
+ "owner": {
+ "type": "string"
+ },
+ "password": {
+ "type": "string"
+ },
+ "passwordType": {
+ "type": "string"
+ },
+ "port": {
+ "type": "integer",
+ "format": "int64"
+ },
+ "serverName": {
+ "type": "string"
+ },
+ "username": {
+ "type": "string"
+ }
+ }
+ },
+ "object.LdapUser": {
+ "title": "LdapUser",
+ "type": "object",
+ "properties": {
+ "EmailAddress": {
+ "type": "string"
+ },
+ "Mail": {
+ "type": "string"
+ },
+ "MobileTelephoneNumber": {
+ "type": "string"
+ },
+ "PostalAddress": {
+ "type": "string"
+ },
+ "RegisteredAddress": {
+ "type": "string"
+ },
+ "TelephoneNumber": {
+ "type": "string"
+ },
+ "address": {
+ "type": "string"
+ },
+ "attributes": {
+ "additionalProperties": {
+ "type": "string"
+ }
+ },
+ "cn": {
+ "type": "string"
+ },
+ "country": {
+ "type": "string"
+ },
+ "countryName": {
+ "type": "string"
+ },
+ "displayName": {
+ "type": "string"
+ },
+ "email": {
+ "type": "string"
+ },
+ "gidNumber": {
+ "type": "string"
+ },
+ "groupId": {
+ "type": "string"
+ },
+ "memberOf": {
+ "type": "string"
+ },
+ "mobile": {
+ "type": "string"
+ },
+ "uid": {
+ "type": "string"
+ },
+ "uidNumber": {
+ "type": "string"
+ },
+ "userPrincipalName": {
+ "type": "string"
+ },
+ "uuid": {
+ "type": "string"
+ }
+ }
+ },
+ "object.ManagedAccount": {
+ "title": "ManagedAccount",
+ "type": "object",
+ "properties": {
+ "application": {
+ "type": "string"
+ },
+ "password": {
+ "type": "string"
+ },
+ "signinUrl": {
+ "type": "string"
+ },
+ "username": {
+ "type": "string"
+ }
+ }
+ },
+ "object.MfaAccount": {
+ "title": "MfaAccount",
+ "type": "object",
+ "properties": {
+ "accountName": {
+ "type": "string"
+ },
+ "issuer": {
+ "type": "string"
+ },
+ "origin": {
+ "type": "string"
+ },
+ "secretKey": {
+ "type": "string"
+ }
+ }
+ },
+ "object.MfaItem": {
+ "title": "MfaItem",
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "rule": {
+ "type": "string"
+ }
+ }
+ },
+ "object.MfaProps": {
+ "title": "MfaProps",
+ "type": "object",
+ "properties": {
+ "countryCode": {
+ "type": "string"
+ },
+ "enabled": {
+ "type": "boolean"
+ },
+ "isPreferred": {
+ "type": "boolean"
+ },
+ "mfaRememberInHours": {
+ "type": "integer",
+ "format": "int64"
+ },
+ "mfaType": {
+ "type": "string"
+ },
+ "recoveryCodes": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "secret": {
+ "type": "string"
+ },
+ "url": {
+ "type": "string"
+ }
+ }
+ },
+ "object.Model": {
+ "title": "Model",
+ "type": "object",
+ "properties": {
+ "createdTime": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "displayName": {
+ "type": "string"
+ },
+ "modelText": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ },
+ "owner": {
+ "type": "string"
+ }
+ }
+ },
+ "object.OidcDiscovery": {
+ "title": "OidcDiscovery",
+ "type": "object",
+ "properties": {
+ "authorization_endpoint": {
+ "type": "string"
+ },
+ "claims_supported": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "device_authorization_endpoint": {
+ "type": "string"
+ },
+ "end_session_endpoint": {
+ "type": "string"
+ },
+ "grant_types_supported": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "id_token_signing_alg_values_supported": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "introspection_endpoint": {
+ "type": "string"
+ },
+ "issuer": {
+ "type": "string"
+ },
+ "jwks_uri": {
+ "type": "string"
+ },
+ "request_object_signing_alg_values_supported": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "request_parameter_supported": {
+ "type": "boolean"
+ },
+ "response_modes_supported": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "response_types_supported": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "scopes_supported": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "subject_types_supported": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "token_endpoint": {
+ "type": "string"
+ },
+ "userinfo_endpoint": {
+ "type": "string"
+ }
+ }
+ },
+ "object.Order": {
+ "title": "Order",
+ "type": "object",
+ "properties": {
+ "createdTime": {
+ "type": "string"
+ },
+ "currency": {
+ "type": "string"
+ },
+ "displayName": {
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ },
+ "owner": {
+ "type": "string"
+ },
+ "payment": {
+ "type": "string"
+ },
+ "price": {
+ "type": "number",
+ "format": "double"
+ },
+ "productInfos": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/object.ProductInfo"
+ }
+ },
+ "products": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "state": {
+ "type": "string"
+ },
+ "updateTime": {
+ "type": "string"
+ },
+ "user": {
+ "type": "string"
+ }
+ }
+ },
+ "object.Organization": {
+ "title": "Organization",
+ "type": "object",
+ "properties": {
+ "accountItems": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/object.AccountItem"
+ }
+ },
+ "accountMenu": {
+ "type": "string"
+ },
+ "balanceCredit": {
+ "type": "number",
+ "format": "double"
+ },
+ "balanceCurrency": {
+ "type": "string"
+ },
+ "countryCodes": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "createdTime": {
+ "type": "string"
+ },
+ "defaultApplication": {
+ "type": "string"
+ },
+ "defaultAvatar": {
+ "type": "string"
+ },
+ "defaultPassword": {
+ "type": "string"
+ },
+ "disableSignin": {
+ "type": "boolean"
+ },
+ "displayName": {
+ "type": "string"
+ },
+ "enableSoftDeletion": {
+ "type": "boolean"
+ },
+ "enableTour": {
+ "type": "boolean"
+ },
+ "favicon": {
+ "type": "string"
+ },
+ "hasPrivilegeConsent": {
+ "type": "boolean"
+ },
+ "initScore": {
+ "type": "integer",
+ "format": "int64"
+ },
+ "ipRestriction": {
+ "type": "string"
+ },
+ "ipWhitelist": {
+ "type": "string"
+ },
+ "isProfilePublic": {
+ "type": "boolean"
+ },
+ "languages": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "logo": {
+ "type": "string"
+ },
+ "logoDark": {
+ "type": "string"
+ },
+ "masterPassword": {
+ "type": "string"
+ },
+ "masterVerificationCode": {
+ "type": "string"
+ },
+ "mfaItems": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/object.MfaItem"
+ }
+ },
+ "mfaRememberInHours": {
+ "type": "integer",
+ "format": "int64"
+ },
+ "name": {
+ "type": "string"
+ },
+ "navItems": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "orgBalance": {
+ "type": "number",
+ "format": "double"
+ },
+ "owner": {
+ "type": "string"
+ },
+ "passwordExpireDays": {
+ "type": "integer",
+ "format": "int64"
+ },
+ "passwordObfuscatorKey": {
+ "type": "string"
+ },
+ "passwordObfuscatorType": {
+ "type": "string"
+ },
+ "passwordOptions": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "passwordSalt": {
+ "type": "string"
+ },
+ "passwordType": {
+ "type": "string"
+ },
+ "tags": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "themeData": {
+ "$ref": "#/definitions/object.ThemeData"
+ },
+ "useEmailAsUsername": {
+ "type": "boolean"
+ },
+ "userBalance": {
+ "type": "number",
+ "format": "double"
+ },
+ "userNavItems": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "userTypes": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "websiteUrl": {
+ "type": "string"
+ },
+ "widgetItems": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "object.Ormer": {
+ "title": "Ormer",
+ "type": "object",
+ "properties": {
+ "Db": {
+ "$ref": "#/definitions/sql.DB"
+ },
+ "Engine": {
+ "$ref": "#/definitions/xorm.Engine"
+ },
+ "dataSourceName": {
+ "type": "string"
+ },
+ "dbName": {
+ "type": "string"
+ },
+ "driverName": {
+ "type": "string"
+ }
+ }
+ },
+ "object.Payment": {
+ "title": "Payment",
+ "type": "object",
+ "properties": {
+ "createdTime": {
+ "type": "string"
+ },
+ "currency": {
+ "type": "string"
+ },
+ "detail": {
+ "type": "string"
+ },
+ "displayName": {
+ "type": "string"
+ },
+ "invoiceRemark": {
+ "type": "string"
+ },
+ "invoiceTaxId": {
+ "type": "string"
+ },
+ "invoiceTitle": {
+ "type": "string"
+ },
+ "invoiceType": {
+ "type": "string"
+ },
+ "invoiceUrl": {
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ },
+ "order": {
+ "type": "string"
+ },
+ "orderObj": {
+ "$ref": "#/definitions/object.Order"
+ },
+ "outOrderId": {
+ "type": "string"
+ },
+ "owner": {
+ "type": "string"
+ },
+ "payUrl": {
+ "type": "string"
+ },
+ "personEmail": {
+ "type": "string"
+ },
+ "personIdCard": {
+ "type": "string"
+ },
+ "personName": {
+ "type": "string"
+ },
+ "personPhone": {
+ "type": "string"
+ },
+ "price": {
+ "type": "number",
+ "format": "double"
+ },
+ "products": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "productsDisplayName": {
+ "type": "string"
+ },
+ "provider": {
+ "type": "string"
+ },
+ "state": {
+ "$ref": "#/definitions/pp.PaymentState"
+ },
+ "successUrl": {
+ "type": "string"
+ },
+ "type": {
+ "type": "string"
+ },
+ "user": {
+ "type": "string"
+ }
+ }
+ },
+ "object.Permission": {
+ "title": "Permission",
+ "type": "object",
+ "properties": {
+ "actions": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "adapter": {
+ "type": "string"
+ },
+ "approveTime": {
+ "type": "string"
+ },
+ "approver": {
+ "type": "string"
+ },
+ "createdTime": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "displayName": {
+ "type": "string"
+ },
+ "domains": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "effect": {
+ "type": "string"
+ },
+ "groups": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "isEnabled": {
+ "type": "boolean"
+ },
+ "model": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ },
+ "owner": {
+ "type": "string"
+ },
+ "resourceType": {
+ "type": "string"
+ },
+ "resources": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "roles": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "state": {
+ "type": "string"
+ },
+ "submitter": {
+ "type": "string"
+ },
+ "users": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "object.Plan": {
+ "title": "Plan",
+ "type": "object",
+ "properties": {
+ "createdTime": {
+ "type": "string"
+ },
+ "currency": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "displayName": {
+ "type": "string"
+ },
+ "isEnabled": {
+ "type": "boolean"
+ },
+ "name": {
+ "type": "string"
+ },
+ "options": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "owner": {
+ "type": "string"
+ },
+ "paymentProviders": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "period": {
+ "type": "string"
+ },
+ "price": {
+ "type": "number",
+ "format": "double"
+ },
+ "product": {
+ "type": "string"
+ },
+ "role": {
+ "type": "string"
+ }
+ }
+ },
+ "object.Pricing": {
+ "title": "Pricing",
+ "type": "object",
+ "properties": {
+ "application": {
+ "type": "string"
+ },
+ "createdTime": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "displayName": {
+ "type": "string"
+ },
+ "isEnabled": {
+ "type": "boolean"
+ },
+ "name": {
+ "type": "string"
+ },
+ "owner": {
+ "type": "string"
+ },
+ "plans": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "trialDuration": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ },
+ "object.Product": {
+ "title": "Product",
+ "type": "object",
+ "properties": {
+ "createdTime": {
+ "type": "string"
+ },
+ "currency": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "detail": {
+ "type": "string"
+ },
+ "disableCustomRecharge": {
+ "type": "boolean"
+ },
+ "displayName": {
+ "type": "string"
+ },
+ "image": {
+ "type": "string"
+ },
+ "isRecharge": {
+ "type": "boolean"
+ },
+ "name": {
+ "type": "string"
+ },
+ "owner": {
+ "type": "string"
+ },
+ "price": {
+ "type": "number",
+ "format": "double"
+ },
+ "providerObjs": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/object.Provider"
+ }
+ },
+ "providers": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "quantity": {
+ "type": "integer",
+ "format": "int64"
+ },
+ "rechargeOptions": {
+ "type": "array",
+ "items": {
+ "type": "number",
+ "format": "double"
+ }
+ },
+ "sold": {
+ "type": "integer",
+ "format": "int64"
+ },
+ "state": {
+ "type": "string"
+ },
+ "successUrl": {
+ "type": "string"
+ },
+ "tag": {
+ "type": "string"
+ }
+ }
+ },
+ "object.ProductInfo": {
+ "title": "ProductInfo",
+ "type": "object",
+ "properties": {
+ "currency": {
+ "type": "string"
+ },
+ "detail": {
+ "type": "string"
+ },
+ "displayName": {
+ "type": "string"
+ },
+ "image": {
+ "type": "string"
+ },
+ "isRecharge": {
+ "type": "boolean"
+ },
+ "name": {
+ "type": "string"
+ },
+ "owner": {
+ "type": "string"
+ },
+ "planName": {
+ "type": "string"
+ },
+ "price": {
+ "type": "number",
+ "format": "double"
+ },
+ "pricingName": {
+ "type": "string"
+ },
+ "quantity": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ },
+ "object.PrometheusInfo": {
+ "title": "PrometheusInfo",
+ "type": "object",
+ "properties": {
+ "apiLatency": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/object.HistogramVecInfo"
+ }
+ },
+ "apiThroughput": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/object.GaugeVecInfo"
+ }
+ },
+ "totalThroughput": {
+ "type": "number",
+ "format": "double"
+ }
+ }
+ },
+ "object.Provider": {
+ "title": "Provider",
+ "type": "object",
+ "properties": {
+ "appId": {
+ "type": "string"
+ },
+ "bucket": {
+ "type": "string"
+ },
+ "category": {
+ "type": "string"
+ },
+ "cert": {
+ "type": "string"
+ },
+ "clientId": {
+ "type": "string"
+ },
+ "clientId2": {
+ "type": "string"
+ },
+ "clientSecret": {
+ "type": "string"
+ },
+ "clientSecret2": {
+ "type": "string"
+ },
+ "content": {
+ "type": "string"
+ },
+ "createdTime": {
+ "type": "string"
+ },
+ "customAuthUrl": {
+ "type": "string"
+ },
+ "customLogo": {
+ "type": "string"
+ },
+ "customTokenUrl": {
+ "type": "string"
+ },
+ "customUserInfoUrl": {
+ "type": "string"
+ },
+ "disableSsl": {
+ "type": "boolean"
+ },
+ "displayName": {
+ "type": "string"
+ },
+ "domain": {
+ "type": "string"
+ },
+ "emailRegex": {
+ "type": "string"
+ },
+ "enablePkce": {
+ "type": "boolean"
+ },
+ "enableProxy": {
+ "type": "boolean"
+ },
+ "enableSignAuthnRequest": {
+ "type": "boolean"
+ },
+ "endpoint": {
+ "type": "string"
+ },
+ "host": {
+ "type": "string"
+ },
+ "httpHeaders": {
+ "additionalProperties": {
+ "type": "string"
+ }
+ },
+ "idP": {
+ "type": "string"
+ },
+ "intranetEndpoint": {
+ "type": "string"
+ },
+ "issuerUrl": {
+ "type": "string"
+ },
+ "metadata": {
+ "type": "string"
+ },
+ "method": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ },
+ "owner": {
+ "type": "string"
+ },
+ "pathPrefix": {
+ "type": "string"
+ },
+ "port": {
+ "type": "integer",
+ "format": "int64"
+ },
+ "providerUrl": {
+ "type": "string"
+ },
+ "receiver": {
+ "type": "string"
+ },
+ "regionId": {
+ "type": "string"
+ },
+ "scopes": {
+ "type": "string"
+ },
+ "signName": {
+ "type": "string"
+ },
+ "subType": {
+ "type": "string"
+ },
+ "templateCode": {
+ "type": "string"
+ },
+ "title": {
+ "type": "string"
+ },
+ "type": {
+ "type": "string"
+ },
+ "userMapping": {
+ "additionalProperties": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "object.ProviderItem": {
+ "title": "ProviderItem",
+ "type": "object",
+ "properties": {
+ "canSignIn": {
+ "type": "boolean"
+ },
+ "canSignUp": {
+ "type": "boolean"
+ },
+ "canUnlink": {
+ "type": "boolean"
+ },
+ "countryCodes": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "name": {
+ "type": "string"
+ },
+ "owner": {
+ "type": "string"
+ },
+ "prompted": {
+ "type": "boolean"
+ },
+ "provider": {
+ "$ref": "#/definitions/object.Provider"
+ },
+ "rule": {
+ "type": "string"
+ },
+ "signupGroup": {
+ "type": "string"
+ }
+ }
+ },
+ "object.Record": {
+ "title": "Record",
+ "type": "object"
+ },
+ "object.Resource": {
+ "title": "Resource",
+ "type": "object",
+ "properties": {
+ "application": {
+ "type": "string"
+ },
+ "createdTime": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "fileFormat": {
+ "type": "string"
+ },
+ "fileName": {
+ "type": "string"
+ },
+ "fileSize": {
+ "type": "integer",
+ "format": "int64"
+ },
+ "fileType": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ },
+ "owner": {
+ "type": "string"
+ },
+ "parent": {
+ "type": "string"
+ },
+ "provider": {
+ "type": "string"
+ },
+ "tag": {
+ "type": "string"
+ },
+ "url": {
+ "type": "string"
+ },
+ "user": {
+ "type": "string"
+ }
+ }
+ },
+ "object.Role": {
+ "title": "Role",
+ "type": "object",
+ "properties": {
+ "createdTime": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "displayName": {
+ "type": "string"
+ },
+ "domains": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "groups": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "isEnabled": {
+ "type": "boolean"
+ },
+ "name": {
+ "type": "string"
+ },
+ "owner": {
+ "type": "string"
+ },
+ "roles": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "users": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "object.SamlItem": {
+ "title": "SamlItem",
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "nameFormat": {
+ "type": "string"
+ },
+ "value": {
+ "type": "string"
+ }
+ }
+ },
+ "object.Session": {
+ "title": "Session",
+ "type": "object",
+ "properties": {
+ "ExclusiveSignin": {
+ "type": "boolean"
+ },
+ "application": {
+ "type": "string"
+ },
+ "createdTime": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ },
+ "owner": {
+ "type": "string"
+ },
+ "sessionId": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "object.SigninItem": {
+ "title": "SigninItem",
+ "type": "object",
+ "properties": {
+ "customCss": {
+ "type": "string"
+ },
+ "isCustom": {
+ "type": "boolean"
+ },
+ "label": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ },
+ "placeholder": {
+ "type": "string"
+ },
+ "rule": {
+ "type": "string"
+ },
+ "visible": {
+ "type": "boolean"
+ }
+ }
+ },
+ "object.SigninMethod": {
+ "title": "SigninMethod",
+ "type": "object",
+ "properties": {
+ "displayName": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ },
+ "rule": {
+ "type": "string"
+ }
+ }
+ },
+ "object.SignupItem": {
+ "title": "SignupItem",
+ "type": "object",
+ "properties": {
+ "customCss": {
+ "type": "string"
+ },
+ "label": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ },
+ "options": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "placeholder": {
+ "type": "string"
+ },
+ "prompted": {
+ "type": "boolean"
+ },
+ "regex": {
+ "type": "string"
+ },
+ "required": {
+ "type": "boolean"
+ },
+ "rule": {
+ "type": "string"
+ },
+ "type": {
+ "type": "string"
+ },
+ "visible": {
+ "type": "boolean"
+ }
+ }
+ },
+ "object.Subscription": {
+ "title": "Subscription",
+ "type": "object",
+ "properties": {
+ "createdTime": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "displayName": {
+ "type": "string"
+ },
+ "endTime": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ },
+ "owner": {
+ "type": "string"
+ },
+ "payment": {
+ "type": "string"
+ },
+ "period": {
+ "type": "string"
+ },
+ "plan": {
+ "type": "string"
+ },
+ "pricing": {
+ "type": "string"
+ },
+ "startTime": {
+ "type": "string"
+ },
+ "state": {
+ "$ref": "#/definitions/object.SubscriptionState"
+ },
+ "user": {
+ "type": "string"
+ }
+ }
+ },
+ "object.SubscriptionState": {
+ "title": "SubscriptionState",
+ "type": "string",
+ "enum": [
+ "SubStatePending = \"Pending\"",
+ "SubStateError = \"Error\"",
+ "SubStateSuspended = \"Suspended\"",
+ "SubStateActive = \"Active\"",
+ "SubStateUpcoming = \"Upcoming\"",
+ "SubStateExpired = \"Expired\""
+ ],
+ "example": "Pending"
+ },
+ "object.Syncer": {
+ "title": "Syncer",
+ "type": "object",
+ "properties": {
+ "affiliationTable": {
+ "type": "string"
+ },
+ "avatarBaseUrl": {
+ "type": "string"
+ },
+ "cert": {
+ "type": "string"
+ },
+ "createdTime": {
+ "type": "string"
+ },
+ "database": {
+ "type": "string"
+ },
+ "databaseType": {
+ "type": "string"
+ },
+ "errorText": {
+ "type": "string"
+ },
+ "host": {
+ "type": "string"
+ },
+ "isEnabled": {
+ "type": "boolean"
+ },
+ "isReadOnly": {
+ "type": "boolean"
+ },
+ "name": {
+ "type": "string"
+ },
+ "organization": {
+ "type": "string"
+ },
+ "owner": {
+ "type": "string"
+ },
+ "password": {
+ "type": "string"
+ },
+ "port": {
+ "type": "integer",
+ "format": "int64"
+ },
+ "sshHost": {
+ "type": "string"
+ },
+ "sshPassword": {
+ "type": "string"
+ },
+ "sshPort": {
+ "type": "integer",
+ "format": "int64"
+ },
+ "sshType": {
+ "type": "string"
+ },
+ "sshUser": {
+ "type": "string"
+ },
+ "sslMode": {
+ "type": "string"
+ },
+ "syncInterval": {
+ "type": "integer",
+ "format": "int64"
+ },
+ "table": {
+ "type": "string"
+ },
+ "tableColumns": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/object.TableColumn"
+ }
+ },
+ "type": {
+ "type": "string"
+ },
+ "user": {
+ "type": "string"
+ }
+ }
+ },
+ "object.TableColumn": {
+ "title": "TableColumn",
+ "type": "object",
+ "properties": {
+ "casdoorName": {
+ "type": "string"
+ },
+ "isHashed": {
+ "type": "boolean"
+ },
+ "isKey": {
+ "type": "boolean"
+ },
+ "name": {
+ "type": "string"
+ },
+ "type": {
+ "type": "string"
+ },
+ "values": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "object.ThemeData": {
+ "title": "ThemeData",
+ "type": "object",
+ "properties": {
+ "borderRadius": {
+ "type": "integer",
+ "format": "int64"
+ },
+ "colorPrimary": {
+ "type": "string"
+ },
+ "isCompact": {
+ "type": "boolean"
+ },
+ "isEnabled": {
+ "type": "boolean"
+ },
+ "themeType": {
+ "type": "string"
+ }
+ }
+ },
+ "object.Ticket": {
+ "title": "Ticket",
+ "type": "object",
+ "properties": {
+ "content": {
+ "type": "string"
+ },
+ "createdTime": {
+ "type": "string"
+ },
+ "displayName": {
+ "type": "string"
+ },
+ "messages": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/object.TicketMessage"
+ }
+ },
+ "name": {
+ "type": "string"
+ },
+ "owner": {
+ "type": "string"
+ },
+ "state": {
+ "type": "string"
+ },
+ "title": {
+ "type": "string"
+ },
+ "updatedTime": {
+ "type": "string"
+ },
+ "user": {
+ "type": "string"
+ }
+ }
+ },
+ "object.TicketMessage": {
+ "title": "TicketMessage",
+ "type": "object",
+ "properties": {
+ "author": {
+ "type": "string"
+ },
+ "isAdmin": {
+ "type": "boolean"
+ },
+ "text": {
+ "type": "string"
+ },
+ "timestamp": {
+ "type": "string"
+ }
+ }
+ },
+ "object.Token": {
+ "title": "Token",
+ "type": "object",
+ "properties": {
+ "accessToken": {
+ "type": "string"
+ },
+ "accessTokenHash": {
+ "type": "string"
+ },
+ "application": {
+ "type": "string"
+ },
+ "code": {
+ "type": "string"
+ },
+ "codeChallenge": {
+ "type": "string"
+ },
+ "codeExpireIn": {
+ "type": "integer",
+ "format": "int64"
+ },
+ "codeIsUsed": {
+ "type": "boolean"
+ },
+ "createdTime": {
+ "type": "string"
+ },
+ "expiresIn": {
+ "type": "integer",
+ "format": "int64"
+ },
+ "name": {
+ "type": "string"
+ },
+ "organization": {
+ "type": "string"
+ },
+ "owner": {
+ "type": "string"
+ },
+ "refreshToken": {
+ "type": "string"
+ },
+ "refreshTokenHash": {
+ "type": "string"
+ },
+ "scope": {
+ "type": "string"
+ },
+ "tokenType": {
+ "type": "string"
+ },
+ "user": {
+ "type": "string"
+ }
+ }
+ },
+ "object.TokenError": {
+ "title": "TokenError",
+ "type": "object",
+ "properties": {
+ "error": {
+ "type": "string"
+ },
+ "error_description": {
+ "type": "string"
+ }
+ }
+ },
+ "object.TokenWrapper": {
+ "title": "TokenWrapper",
+ "type": "object",
+ "properties": {
+ "access_token": {
+ "type": "string"
+ },
+ "expires_in": {
+ "type": "integer",
+ "format": "int64"
+ },
+ "id_token": {
+ "type": "string"
+ },
+ "refresh_token": {
+ "type": "string"
+ },
+ "scope": {
+ "type": "string"
+ },
+ "token_type": {
+ "type": "string"
+ }
+ }
+ },
+ "object.Transaction": {
+ "title": "Transaction",
+ "type": "object",
+ "properties": {
+ "amount": {
+ "type": "number",
+ "format": "double"
+ },
+ "application": {
+ "type": "string"
+ },
+ "category": {
+ "$ref": "#/definitions/object.TransactionCategory"
+ },
+ "createdTime": {
+ "type": "string"
+ },
+ "currency": {
+ "type": "string"
+ },
+ "displayName": {
+ "type": "string"
+ },
+ "domain": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ },
+ "owner": {
+ "type": "string"
+ },
+ "payment": {
+ "type": "string"
+ },
+ "provider": {
+ "type": "string"
+ },
+ "state": {
+ "type": "string"
+ },
+ "subtype": {
+ "type": "string"
+ },
+ "tag": {
+ "type": "string"
+ },
+ "type": {
+ "type": "string"
+ },
+ "user": {
+ "type": "string"
+ }
+ }
+ },
+ "object.TransactionCategory": {
+ "title": "TransactionCategory",
+ "type": "string",
+ "enum": [
+ "TransactionCategoryPurchase = \"Purchase\"",
+ "TransactionCategoryRecharge = \"Recharge\""
+ ],
+ "example": "Purchase"
+ },
+ "object.User": {
+ "title": "User",
+ "type": "object",
+ "properties": {
+ "accessKey": {
+ "type": "string"
+ },
+ "accessSecret": {
+ "type": "string"
+ },
+ "accessToken": {
+ "type": "string"
+ },
+ "address": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "addresses": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/object.Address"
+ }
+ },
+ "adfs": {
+ "type": "string"
+ },
+ "affiliation": {
+ "type": "string"
+ },
+ "alipay": {
+ "type": "string"
+ },
+ "amazon": {
+ "type": "string"
+ },
+ "apple": {
+ "type": "string"
+ },
+ "auth0": {
+ "type": "string"
+ },
+ "avatar": {
+ "type": "string"
+ },
+ "avatarType": {
+ "type": "string"
+ },
+ "azuread": {
+ "type": "string"
+ },
+ "azureadb2c": {
+ "type": "string"
+ },
+ "baidu": {
+ "type": "string"
+ },
+ "balance": {
+ "type": "number",
+ "format": "double"
+ },
+ "balanceCredit": {
+ "type": "number",
+ "format": "double"
+ },
+ "balanceCurrency": {
+ "type": "string"
+ },
+ "battlenet": {
+ "type": "string"
+ },
+ "bilibili": {
+ "type": "string"
+ },
+ "bio": {
+ "type": "string"
+ },
+ "birthday": {
+ "type": "string"
+ },
+ "bitbucket": {
+ "type": "string"
+ },
+ "box": {
+ "type": "string"
+ },
+ "cart": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/object.ProductInfo"
+ }
+ },
+ "casdoor": {
+ "type": "string"
+ },
+ "cloudfoundry": {
+ "type": "string"
+ },
+ "countryCode": {
+ "type": "string"
+ },
+ "createdIp": {
+ "type": "string"
+ },
+ "createdTime": {
+ "type": "string"
+ },
+ "currency": {
+ "type": "string"
+ },
+ "custom": {
+ "type": "string"
+ },
+ "custom10": {
+ "type": "string"
+ },
+ "custom2": {
+ "type": "string"
+ },
+ "custom3": {
+ "type": "string"
+ },
+ "custom4": {
+ "type": "string"
+ },
+ "custom5": {
+ "type": "string"
+ },
+ "custom6": {
+ "type": "string"
+ },
+ "custom7": {
+ "type": "string"
+ },
+ "custom8": {
+ "type": "string"
+ },
+ "custom9": {
+ "type": "string"
+ },
+ "dailymotion": {
+ "type": "string"
+ },
+ "deezer": {
+ "type": "string"
+ },
+ "deletedTime": {
+ "type": "string"
+ },
+ "digitalocean": {
+ "type": "string"
+ },
+ "dingtalk": {
+ "type": "string"
+ },
+ "discord": {
+ "type": "string"
+ },
+ "displayName": {
+ "type": "string"
+ },
+ "douyin": {
+ "type": "string"
+ },
+ "dropbox": {
+ "type": "string"
+ },
+ "education": {
+ "type": "string"
+ },
+ "email": {
+ "type": "string"
+ },
+ "emailVerified": {
+ "type": "boolean"
+ },
+ "eveonline": {
+ "type": "string"
+ },
+ "externalId": {
+ "type": "string"
+ },
+ "faceIds": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/object.FaceId"
+ }
+ },
+ "facebook": {
+ "type": "string"
+ },
+ "firstName": {
+ "type": "string"
+ },
+ "fitbit": {
+ "type": "string"
+ },
+ "gender": {
+ "type": "string"
+ },
+ "gitea": {
+ "type": "string"
+ },
+ "gitee": {
+ "type": "string"
+ },
+ "github": {
+ "type": "string"
+ },
+ "gitlab": {
+ "type": "string"
+ },
+ "google": {
+ "type": "string"
+ },
+ "groups": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "hash": {
+ "type": "string"
+ },
+ "heroku": {
+ "type": "string"
+ },
+ "homepage": {
+ "type": "string"
+ },
+ "id": {
+ "type": "string"
+ },
+ "idCard": {
+ "type": "string"
+ },
+ "idCardType": {
+ "type": "string"
+ },
+ "influxcloud": {
+ "type": "string"
+ },
+ "infoflow": {
+ "type": "string"
+ },
+ "instagram": {
+ "type": "string"
+ },
+ "intercom": {
+ "type": "string"
+ },
+ "invitation": {
+ "type": "string"
+ },
+ "invitationCode": {
+ "type": "string"
+ },
+ "ipWhitelist": {
+ "type": "string"
+ },
+ "isAdmin": {
+ "type": "boolean"
+ },
+ "isDefaultAvatar": {
+ "type": "boolean"
+ },
+ "isDeleted": {
+ "type": "boolean"
+ },
+ "isForbidden": {
+ "type": "boolean"
+ },
+ "isOnline": {
+ "type": "boolean"
+ },
+ "isVerified": {
+ "type": "boolean"
+ },
+ "kakao": {
+ "type": "string"
+ },
+ "karma": {
+ "type": "integer",
+ "format": "int64"
+ },
+ "kwai": {
+ "type": "string"
+ },
+ "language": {
+ "type": "string"
+ },
+ "lark": {
+ "type": "string"
+ },
+ "lastChangePasswordTime": {
+ "type": "string"
+ },
+ "lastName": {
+ "type": "string"
+ },
+ "lastSigninIp": {
+ "type": "string"
+ },
+ "lastSigninTime": {
+ "type": "string"
+ },
+ "lastSigninWrongTime": {
+ "type": "string"
+ },
+ "lastfm": {
+ "type": "string"
+ },
+ "ldap": {
+ "type": "string"
+ },
+ "line": {
+ "type": "string"
+ },
+ "linkedin": {
+ "type": "string"
+ },
+ "location": {
+ "type": "string"
+ },
+ "mailru": {
+ "type": "string"
+ },
+ "managedAccounts": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/object.ManagedAccount"
+ }
+ },
+ "meetup": {
+ "type": "string"
+ },
+ "metamask": {
+ "type": "string"
+ },
+ "mfaAccounts": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/object.MfaAccount"
+ }
+ },
+ "mfaEmailEnabled": {
+ "type": "boolean"
+ },
+ "mfaItems": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/object.MfaItem"
+ }
+ },
+ "mfaPhoneEnabled": {
+ "type": "boolean"
+ },
+ "mfaPushEnabled": {
+ "type": "boolean"
+ },
+ "mfaPushProvider": {
+ "type": "string"
+ },
+ "mfaPushReceiver": {
+ "type": "string"
+ },
+ "mfaRadiusEnabled": {
+ "type": "boolean"
+ },
+ "mfaRadiusProvider": {
+ "type": "string"
+ },
+ "mfaRadiusUsername": {
+ "type": "string"
+ },
+ "mfaRememberDeadline": {
+ "type": "string"
+ },
+ "microsoftonline": {
+ "type": "string"
+ },
+ "multiFactorAuths": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/object.MfaProps"
+ }
+ },
+ "name": {
+ "type": "string"
+ },
+ "naver": {
+ "type": "string"
+ },
+ "needUpdatePassword": {
+ "type": "boolean"
+ },
+ "nextcloud": {
+ "type": "string"
+ },
+ "okta": {
+ "type": "string"
+ },
+ "onedrive": {
+ "type": "string"
+ },
+ "originalRefreshToken": {
+ "type": "string"
+ },
+ "originalToken": {
+ "type": "string"
+ },
+ "oura": {
+ "type": "string"
+ },
+ "owner": {
+ "type": "string"
+ },
+ "password": {
+ "type": "string"
+ },
+ "passwordSalt": {
+ "type": "string"
+ },
+ "passwordType": {
+ "type": "string"
+ },
+ "patreon": {
+ "type": "string"
+ },
+ "paypal": {
+ "type": "string"
+ },
+ "permanentAvatar": {
+ "type": "string"
+ },
+ "permissions": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/object.Permission"
+ }
+ },
+ "phone": {
+ "type": "string"
+ },
+ "preHash": {
+ "type": "string"
+ },
+ "preferredMfaType": {
+ "type": "string"
+ },
+ "properties": {
+ "additionalProperties": {
+ "type": "string"
+ }
+ },
+ "qq": {
+ "type": "string"
+ },
+ "ranking": {
+ "type": "integer",
+ "format": "int64"
+ },
+ "realName": {
+ "type": "string"
+ },
+ "recoveryCodes": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "region": {
+ "type": "string"
+ },
+ "registerSource": {
+ "type": "string"
+ },
+ "registerType": {
+ "type": "string"
+ },
+ "roles": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/object.Role"
+ }
+ },
+ "salesforce": {
+ "type": "string"
+ },
+ "score": {
+ "type": "integer",
+ "format": "int64"
+ },
+ "shopify": {
+ "type": "string"
+ },
+ "signinWrongTimes": {
+ "type": "integer",
+ "format": "int64"
+ },
+ "signupApplication": {
+ "type": "string"
+ },
+ "slack": {
+ "type": "string"
+ },
+ "soundcloud": {
+ "type": "string"
+ },
+ "spotify": {
+ "type": "string"
+ },
+ "steam": {
+ "type": "string"
+ },
+ "strava": {
+ "type": "string"
+ },
+ "stripe": {
+ "type": "string"
+ },
+ "tag": {
+ "type": "string"
+ },
+ "tiktok": {
+ "type": "string"
+ },
+ "title": {
+ "type": "string"
+ },
+ "totpSecret": {
+ "type": "string"
+ },
+ "tumblr": {
+ "type": "string"
+ },
+ "twitch": {
+ "type": "string"
+ },
+ "twitter": {
+ "type": "string"
+ },
+ "type": {
+ "type": "string"
+ },
+ "typetalk": {
+ "type": "string"
+ },
+ "uber": {
+ "type": "string"
+ },
+ "updatedTime": {
+ "type": "string"
+ },
+ "vk": {
+ "type": "string"
+ },
+ "web3onboard": {
+ "type": "string"
+ },
+ "webauthnCredentials": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/webauthn.Credential"
+ }
+ },
+ "wechat": {
+ "type": "string"
+ },
+ "wecom": {
+ "type": "string"
+ },
+ "weibo": {
+ "type": "string"
+ },
+ "wepay": {
+ "type": "string"
+ },
+ "xero": {
+ "type": "string"
+ },
+ "yahoo": {
+ "type": "string"
+ },
+ "yammer": {
+ "type": "string"
+ },
+ "yandex": {
+ "type": "string"
+ },
+ "zoom": {
+ "type": "string"
+ }
+ }
+ },
+ "object.Userinfo": {
+ "title": "Userinfo",
+ "type": "object",
+ "properties": {
+ "address": {
+ "type": "string"
+ },
+ "aud": {
+ "type": "string"
+ },
+ "email": {
+ "type": "string"
+ },
+ "email_verified": {
+ "type": "boolean"
+ },
+ "groups": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "is_verified": {
+ "type": "boolean"
+ },
+ "iss": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ },
+ "permissions": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "phone": {
+ "type": "string"
+ },
+ "picture": {
+ "type": "string"
+ },
+ "preferred_username": {
+ "type": "string"
+ },
+ "real_name": {
+ "type": "string"
+ },
+ "roles": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "sub": {
+ "type": "string"
+ }
+ }
+ },
+ "object.Verification": {
+ "title": "Verification",
+ "type": "object"
+ },
+ "object.WebFinger": {
+ "title": "WebFinger",
+ "type": "object",
+ "properties": {
+ "aliases": {
+ "$ref": "#/definitions/232967.\u003cnil\u003e.string"
+ },
+ "links": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/object.WebFingerLink"
+ }
+ },
+ "properties": {
+ "$ref": "#/definitions/233025.string.string"
+ },
+ "subject": {
+ "type": "string"
+ }
+ }
+ },
+ "object.WebFingerLink": {
+ "title": "WebFingerLink",
+ "type": "object",
+ "properties": {
+ "href": {
+ "type": "string"
+ },
+ "rel": {
+ "type": "string"
+ }
+ }
+ },
+ "object.Webhook": {
+ "title": "Webhook",
+ "type": "object",
+ "properties": {
+ "contentType": {
+ "type": "string"
+ },
+ "createdTime": {
+ "type": "string"
+ },
+ "events": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "headers": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/object.Header"
+ }
+ },
+ "isEnabled": {
+ "type": "boolean"
+ },
+ "isUserExtended": {
+ "type": "boolean"
+ },
+ "method": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ },
+ "objectFields": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "organization": {
+ "type": "string"
+ },
+ "owner": {
+ "type": "string"
+ },
+ "singleOrgOnly": {
+ "type": "boolean"
+ },
+ "tokenFields": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "url": {
+ "type": "string"
+ }
+ }
+ },
+ "pp.PaymentState": {
+ "title": "PaymentState",
+ "type": "string",
+ "enum": [
+ "PaymentStatePaid = \"Paid\"",
+ "PaymentStateCreated = \"Created\"",
+ "PaymentStateCanceled = \"Canceled\"",
+ "PaymentStateTimeout = \"Timeout\"",
+ "PaymentStateError = \"Error\""
+ ],
+ "example": "Paid"
+ },
+ "protocol.CredentialAssertion": {
+ "title": "CredentialAssertion",
+ "type": "object"
+ },
+ "protocol.CredentialAssertionResponse": {
+ "title": "CredentialAssertionResponse",
+ "type": "object"
+ },
+ "protocol.CredentialCreation": {
+ "title": "CredentialCreation",
+ "type": "object"
+ },
+ "protocol.CredentialCreationResponse": {
+ "title": "CredentialCreationResponse",
+ "type": "object"
+ },
+ "sql.DB": {
+ "title": "DB",
+ "type": "object"
+ },
+ "ssh.Client": {
+ "title": "Client",
+ "type": "object"
+ },
+ "util.SystemInfo": {
+ "title": "SystemInfo",
+ "type": "object",
+ "properties": {
+ "cpuUsage": {
+ "type": "array",
+ "items": {
+ "type": "number",
+ "format": "double"
+ }
+ },
+ "memoryTotal": {
+ "type": "integer",
+ "format": "int64"
+ },
+ "memoryUsed": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ },
+ "util.VersionInfo": {
+ "title": "VersionInfo",
+ "type": "object",
+ "properties": {
+ "commitId": {
+ "type": "string"
+ },
+ "commitOffset": {
+ "type": "integer",
+ "format": "int64"
+ },
+ "version": {
+ "type": "string"
+ }
+ }
+ },
+ "webauthn.Credential": {
+ "title": "Credential",
+ "type": "object"
+ },
+ "xorm.Engine": {
+ "title": "Engine",
+ "type": "object"
+ },
+ "xormadapter.Adapter": {
+ "title": "Adapter",
+ "type": "object"
+ },
+ "xormadapter.CasbinRule": {
+ "title": "CasbinRule",
+ "type": "object"
+ }
+ },
+ "securityDefinitions": {
+ "AccessToken": {
+ "type": "apiKey",
+ "name": "Authorization",
+ "in": "header"
+ }
+ }
+}
diff --git a/legacy/dash-prototype/test-logic-v3.mjs b/legacy/dash-prototype/test-logic-v3.mjs
new file mode 100644
index 0000000..edfcbac
--- /dev/null
+++ b/legacy/dash-prototype/test-logic-v3.mjs
@@ -0,0 +1,109 @@
+import { readFileSync } from 'node:fs';
+const core = readFileSync('C:/Users/Administrator/Downloads/v1.2/core.js', 'utf8');
+const invHtml = readFileSync('C:/Users/Administrator/Downloads/v1.2/inventory-system.html', 'utf8');
+const chgHtml = readFileSync('C:/Users/Administrator/Downloads/v1.2/change-inventory.html', 'utf8');
+const m1 = invHtml.match(/