feat: Gitea — register, settings connect, tabs org, search
1. Pas de Gitea sans config: _require_gitea() → 401 si pas de token OAuth 2. Register Gitea: boutons "Login/Register with Gitea" dynamiques selon l'onglet 3. Settings → Integrations: ✅ Active / 🔗 Connect / Disconnect + API status/disconnect 4. Workspaces: tabs par org (All | org1 | org2) + barre recherche 🔍 filtrage live 5. API: GET /api/gitea/status, DELETE /api/gitea/disconnect
This commit is contained in:
@@ -318,9 +318,16 @@
|
||||
<div class="setting-row">
|
||||
<div>
|
||||
<div class="setting-label">Gitea</div>
|
||||
<div class="setting-desc">Connected to git.dracodev.net</div>
|
||||
<div class="setting-desc">
|
||||
<span x-show="giteaLinked">Connected to git.dracodev.net</span>
|
||||
<span x-show="!giteaLinked">Connect your Gitea account to access projects</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="setting-control">
|
||||
<span x-show="giteaLinked" style="font-size:12px;color:#0F7B6C;">✅ Active</span>
|
||||
<button x-show="giteaLinked" class="btn-sm" style="color:var(--danger);" @click="disconnectGitea()">Disconnect</button>
|
||||
<a x-show="!giteaLinked" class="btn-sm" href="/auth/login?provider=gitea" style="text-decoration:none;color:var(--accent);">🔗 Connect</a>
|
||||
</div>
|
||||
<div class="setting-control"><span style="font-size:12px;color:#0F7B6C;">✅ Active</span></div>
|
||||
</div>
|
||||
<div class="setting-row">
|
||||
<div>
|
||||
@@ -502,6 +509,8 @@ document.addEventListener('alpine:init', function() {
|
||||
defaultView: localStorage.getItem('fd_default_view') || 'tree',
|
||||
userInfo: {full_name: '{{ user.full_name or "" }}', login: '{{ user.login or "" }}', email: '{{ user.email or "" }}'},
|
||||
userIsAdmin: {{ 'true' if user.get('is_admin') else 'false' }},
|
||||
// Gitea
|
||||
giteaLinked: false,
|
||||
// Account form
|
||||
accountForm: {login:'{{ user.login or "" }}', full_name:'{{ user.full_name or "" }}', email:'{{ user.email or "" }}', password:''},
|
||||
accountSaving: false,
|
||||
@@ -518,6 +527,7 @@ document.addEventListener('alpine:init', function() {
|
||||
|
||||
async init() {
|
||||
await this.loadTags();
|
||||
await this.loadGiteaStatus();
|
||||
},
|
||||
|
||||
async loadTags() {
|
||||
@@ -716,6 +726,21 @@ document.addEventListener('alpine:init', function() {
|
||||
saveDefaultView() {
|
||||
localStorage.setItem('fd_default_view', this.defaultView);
|
||||
}
|
||||
async loadGiteaStatus() {
|
||||
try {
|
||||
var r = await fetch('/api/gitea/status');
|
||||
var d = await r.json();
|
||||
this.giteaLinked = d.linked || false;
|
||||
} catch(e) { this.giteaLinked = false; }
|
||||
},
|
||||
|
||||
async disconnectGitea() {
|
||||
if (!confirm('Disconnect Gitea? You can reconnect anytime.')) return;
|
||||
try {
|
||||
var r = await fetch('/api/gitea/disconnect', { method: 'DELETE', headers: {'X-CSRF-Token': this.getCsrfToken()} });
|
||||
if (r.ok) { this.giteaLinked = false; }
|
||||
} catch(e) {}
|
||||
},
|
||||
};
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user