package webui import ( "github.com/pogo-vcs/pogo/db" "github.com/pogo-vcs/pogo/server/webui/components" "strconv" ) templ Settings() { if !IsLoggedIn(ctx) { @layout("Unauthorized") { @components.Header(nil) @components.Main() {

Unauthorized

You must be logged in to access repository settings.

} } } else { if repoIdStr, ok := GetParam(ctx, "id"); ok { if repoId, err := strconv.ParseInt(repoIdStr, 10, 32); err == nil { if repo, err := db.Q.GetRepository(ctx, int32(repoId)); err == nil { {{ user := GetUser(ctx) }} {{ hasAccess := false }} if user != nil { if accessCheck, err := db.Q.CheckUserRepositoryAccess(ctx, repo.ID, user.ID); err == nil { {{ hasAccess = accessCheck }} } } if !hasAccess { @layout("Unauthorized") { @components.Header(user) @components.Main() {

Unauthorized

You do not have access to manage this repository.

} } } else { @layout(repo.Name + " - Settings") { @components.Header(user) { Back to Repository } @components.Main() {

Repository Settings

Repository Name

Visibility Settings

Current visibility: if repo.Public { Public } else { Private }

if repo.Public { Public repositories can be accessed by anyone. Making it private will restrict access to users you explicitly grant access to. } else { Private repositories can only be accessed by users you explicitly grant access to. Making it public will allow anyone to access it. }

User Access

Current Users with Access

if users, err := db.Q.GetRepositoryUsers(ctx, repo.ID); err == nil { if len(users) > 0 { } else {

No users have access to this repository.

} } else {

Failed to load users.

}

Grant Access to User

Secrets

Secrets can be used in CI pipeline configurations using the { "{{ secret \"KEY\" }}" } template function. They are useful for storing sensitive data like API tokens and credentials.

Current Secrets

if secrets, err := db.Q.GetAllSecrets(ctx, repo.ID); err == nil { if len(secrets) > 0 { } else {

No secrets configured.

} } else {

Failed to load secrets.

}

Add or Update Secret

} } } } else { @layout("Repository Not Found") { @components.Header(GetUser(ctx)) @components.Main() {

Repository Not Found

The repository you are looking for does not exist.

} } } } else { @layout("Invalid Repository ID") { @components.Header(GetUser(ctx)) @components.Main() {

Invalid Repository ID

The repository ID is invalid.

} } } } else { @layout("Missing Repository ID") { @components.Header(GetUser(ctx)) @components.Main() {

Missing Repository ID

No repository ID was provided.

} } } } } script confirmVisibilityChange(isPublic bool, repoId int) { const action = isPublic ? "private" : "public"; const actionText = isPublic ? "make this repository private" : "make this repository public"; const warning = isPublic ? "This will restrict access to only users you have explicitly granted access to." : "This will allow anyone to access this repository, including cloning and viewing its contents."; if (confirm(`Are you sure you want to ${actionText}?\n\n${warning}`)) { const form = document.createElement('form'); form.method = 'POST'; form.action = `/api/repository/${repoId}/visibility`; const input = document.createElement('input'); input.type = 'hidden'; input.name = 'public'; input.value = isPublic ? 'false' : 'true'; form.appendChild(input); document.body.appendChild(form); form.submit(); } } script toggleSecretVisibility(key string) { const valueEl = document.getElementById('secret-value-' + key); const btn = event.target; if (valueEl.classList.contains('hidden')) { valueEl.classList.remove('hidden'); btn.textContent = 'Hide'; } else { valueEl.classList.add('hidden'); btn.textContent = 'Show'; } }