syntax = "proto3";
option go_package = "github.com/argoproj/argo-cd/v2/pkg/apiclient/settings";

// Settings Service
//
// Settings Service API retrieves Argo CD settings
package cluster;

import "gogoproto/gogo.proto";
import "google/api/annotations.proto";
import "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1/generated.proto";
import "github.com/argoproj/argo-cd/v2/server/settings/oidc/claims.proto";

// SettingsQuery is a query for Argo CD settings
message SettingsQuery {
}

message Settings {
    string url = 1 [(gogoproto.customname) = "URL"];
    DexConfig dexConfig = 2;
    OIDCConfig oidcConfig = 3 [(gogoproto.customname) = "OIDCConfig"];
    string appLabelKey = 4;
    map<string, github.com.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.ResourceOverride> resourceOverrides = 5;
    bool statusBadgeEnabled = 6;
    GoogleAnalyticsConfig googleAnalytics = 7;
    github.com.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.KustomizeOptions kustomizeOptions = 8;
    // Help settings
    Help help = 9;
    repeated Plugin plugins = 10;
    bool userLoginsDisabled = 11;
    repeated github.com.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.ConfigManagementPlugin configManagementPlugins = 12;
    repeated string kustomizeVersions = 13;
    string uiCssURL = 14;
    string uiBannerContent = 15;
    string uiBannerURL = 16;
    string passwordPattern = 17;
    string trackingMethod = 18;
    bool uiBannerPermanent = 19;
    string uiBannerPosition = 20;
    string statusBadgeRootUrl = 21;
    bool execEnabled = 22;
    string controllerNamespace = 23;
    bool appsInAnyNamespaceEnabled = 24;
}

message GoogleAnalyticsConfig {
    string trackingID = 1;
    bool anonymizeUsers = 2;
}

message SettingsPluginsResponse {
    repeated Plugin plugins = 1;
}

// Help settings
message Help {
    // the URL for getting chat help, this will typically be your Slack channel for support
    string chatUrl = 1;
    // the text for getting chat help, defaults to "Chat now!"
    string chatText = 2;
    // the URLs for downloading argocd binaries
    map<string, string> binaryUrls = 3;
}

// Plugin settings
message Plugin {
    // the name of the plugin, e.g. "kasane"
    string name = 1;
}

message DexConfig {
    repeated Connector connectors = 1;
}

message Connector {
    string name = 1;
    string type = 2;
}

message OIDCConfig {
    string name = 1;
    string issuer = 2;
    string clientID = 3 [(gogoproto.customname) = "ClientID"];
    string cliClientID = 4 [(gogoproto.customname) = "CLIClientID"];
    repeated string scopes = 5;
    map<string, github.com.argoproj.argo_cd.server.settings.oidc.Claim> idTokenClaims = 6 [(gogoproto.customname) = "IDTokenClaims"];
}

// SettingsService
service SettingsService {

    // Get returns Argo CD settings
    rpc Get(SettingsQuery) returns (Settings) {
        option (google.api.http).get = "/api/v1/settings";
    }

    // Get returns Argo CD plugins
    rpc GetPlugins(SettingsQuery) returns (SettingsPluginsResponse) {
        option (google.api.http).get = "/api/v1/settings/plugins";
    }
}
