/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements. See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership. The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License. You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied. See the License for the
 * specific language governing permissions and limitations
 * under the License.
 *
 */

syntax = "proto3";

option java_multiple_files = true;
package org.apache.custos.core.iam.api;


enum FederatedIDPs {
    CILOGON = 0;
    FACEBOOK = 1;
    GOOGLE = 2;
    LINKEDIN = 3;
    TWITTER = 4;
    CUSTOM_OIDC = 5;
}


message SetUpTenantRequest {
    int64 tenant_id = 1;
    string tenant_name = 2;
    string admin_username = 3;
    string admin_firstname = 4;
    string admin_lastname = 5;
    string admin_email = 6;
    string admin_password = 7;
    string tenant_uRL = 8;
    string requester_email = 9;
    repeated string redirect_uRIs = 10;
    string custos_client_id = 11;

}

message ConfigureFederateIDPRequest {
    int64 tenant_id = 1;
    FederatedIDPs type = 2;
    string client_iD = 3;
    string client_sec = 4;
    map<string, string> config_map = 5;
    string requester_email = 6;
    string idp_id = 7;
    string scope = 8;
}


message FederateIDPResponse {
    bool status = 1;
}

message SetUpTenantResponse {
    string client_id = 1;
    string client_secret = 2;
}

message IsUsernameAvailableRequest {
    int64 tenant_id = 1;
    string access_token = 2;
    string user_name = 3;

}

message CheckingResponse {
    bool is_exist = 1;
}


message UserRepresentation {
    string id = 1;
    string username = 3;
    string first_name = 4;
    string last_name = 5;
    string password = 6;
    string email = 7;
    bool temporary_password = 8;
    repeated string realm_roles = 9;
    repeated string client_roles = 10;
    repeated UserAttribute attributes = 11;
    string state = 12;
    double creation_time = 13;
    double last_login_at = 14;
}


message GroupRepresentation {
    string name = 1;
    string id = 2;
    repeated string realm_roles = 3;
    repeated string client_roles = 4;
    repeated UserAttribute attributes = 5;
    repeated UserRepresentation users = 6;
    repeated GroupRepresentation sub_groups = 7;
    string description = 8;
    string ownerId = 9;
}


message RegisterUserRequest {
    int64 tenant_id = 1;
    string access_token = 2;
    string client_id = 3;
    string client_sec = 4;
    UserRepresentation user = 5;
    string performed_by = 6;
}


message RegisterUsersRequest {
    repeated UserRepresentation users = 1;
    int64 tenant_id = 2;
    string access_token = 3;
    string client_id = 4;
    string performed_by = 5;
}

message RegisterUserResponse {
    bool is_registered = 1;
}

message RegisterUsersResponse {
    bool all_useres_registered = 1;
    repeated UserRepresentation failed_users = 2;
}


message UserSearchMetadata {
    string username = 1;
    string first_name = 2;
    string last_name = 3;
    string email = 4;
    string id = 5;
}

message FindUsersRequest {
    UserSearchMetadata user = 3;
    int32 offset = 4;
    int32 limit = 5;
    int64 tenant_id = 1;
    string access_token = 2;
    string client_id = 6;
    string client_sec = 7;

}

message UserSearchRequest {
    UserSearchMetadata user = 1;
    int64 tenant_id = 2;
    string access_token = 3;
    string client_id = 4;
    string client_sec = 5;
    string performed_by = 6;
}

message FindUsersResponse {
    repeated UserRepresentation users = 1;
}

message ResetUserPassword {
    string username = 1;
    string password = 2;
    int64 tenant_id = 3;
    string access_token = 4;
    string client_id = 5;
    string client_sec = 6;
    string old_password = 7;
}


message DeleteUserRolesRequest {
    int64 tenant_id = 1;
    string username = 2;
    repeated string client_roles = 3;
    repeated string roles = 4;
    string access_token = 5;
    string client_id = 6;
    string performed_by = 7;
    string id = 8;
}

message AddUserRolesRequest {
    int64 tenant_id = 1;
    repeated string usernames = 2;
    repeated string roles = 3;
    string access_token = 4;
    string client_id = 5;
    bool client_level = 6;
    string performed_by = 7;
    repeated string agents = 8;
}

message UpdateUserProfileRequest {
    string access_token = 1;
    int64 tenant_id = 2;
    UserRepresentation user = 3;

}

message AddUserResponse {
    string code = 1;
}

message GetOperationsMetadataRequest {
    int64 trace_id = 1;
}

message OperationMetadata {
    string event = 1;
    string status = 2;
    string time_stamp = 3;
    string performed_by = 4;
}
message GetOperationsMetadataResponse {
    repeated OperationMetadata metadata = 1;
}

message DeleteTenantRequest {
    int64 tenant_id = 1;
}

message AddRolesRequest {
    repeated RoleRepresentation roles = 1;
    bool client_level = 2;
    int64 tenant_id = 3;
    string client_id = 4;
}

message GetRolesRequest {
    bool client_level = 1;
    int64 tenant_id = 2;
    string client_id = 3;
}

message RoleRepresentation {
    string name = 1;
    string description = 2;
    bool composite = 3;
    string id = 4;
}

message DeleteRoleRequest {
    bool client_level = 1;
    int64 tenant_id = 2;
    string client_id = 3;
    RoleRepresentation role = 4;
}

message AllRoles {
    repeated RoleRepresentation roles = 1;
    string scope = 2;
}

message AddProtocolMapperRequest {
    string name = 1;
    string attribute_name = 2;
    string claim_name = 3;
    ClaimJSONTypes claim_type = 4;
    int64 tenant_id = 6;
    string client_id = 7;
    MapperTypes mapper_type = 8;
    bool add_to_id_token = 9;
    bool add_to_access_token = 10;
    bool add_to_user_info = 11;
    bool multi_valued = 12;
    bool aggregate_attribute_values = 13;
}

enum MapperTypes {
    USER_ATTRIBUTE = 0;
    USER_REALM_ROLE = 1;
    USER_CLIENT_ROLE = 2;
}

enum ClaimJSONTypes {
    STRING = 0;
    LONG = 1;
    INTEGER = 2;
    BOOLEAN = 3;
    JSON = 4;
}

enum ResourceTypes {
    USER =0;
    AGENT = 1;
}

message OperationStatus {
    bool status = 1;
}

message AddUserAttributesRequest {
    repeated UserAttribute attributes = 1;
    repeated string users = 2;
    int64 tenant_id = 3;
    string client_id = 4;
    string access_token = 5;
    string performedBy = 6;
    repeated string agents = 7;
}

message DeleteUserAttributeRequest {
    repeated UserAttribute attributes = 1;
    repeated string users = 2;
    int64 tenant_id = 3;
    string client_id = 4;
    string access_token = 5;
    string performedBy = 6;
    repeated string agents = 7;
}

message UserAttribute {
    string key = 1;
    repeated string values = 2;
}

message EventPersistenceRequest {
    int64 tenantId = 1;
    bool admin_event = 2;
    string event = 3;
    bool enable = 4;
    int64 persistence_time = 5;
    string performedBy = 6;
}


message GroupsRequest {
    int64 tenantId = 1;
    string accessToken = 2;
    string performedBy = 3;
    string clientId = 4;
    string clientSec = 5;
    repeated GroupRepresentation groups = 6;
}

message GroupRequest {
    int64 tenantId = 1;
    string accessToken = 2;
    string performedBy = 3;
    string clientId = 4;
    string clientSec = 5;
    string id = 6;
    GroupRepresentation group = 7;
}

message GroupsResponse {
    repeated GroupRepresentation groups = 1;
}

message UserGroupMappingRequest {
    int64 tenantId = 1;
    string accessToken = 2;
    string performedBy = 3;
    string clientId = 4;
    string clientSec = 5;
    string username = 6;
    string group_id = 7;
    string membership_type = 8;
}

message AgentClientMetadata {
    int64 tenantId = 1;
    string tenantURL = 2;
    repeated string redirectURIs = 3;
    string clientName = 4;
    int64 access_token_life_time = 5;
    string performedBy = 6;
    string access_token = 7;
}

message Agent {
    string id = 1;
    repeated string realm_roles = 2;
    repeated UserAttribute attributes = 3;
    bool isEnabled = 4;
    double creation_time = 5;
    double last_modified_at = 6;
    repeated string client_roles = 7;
}


message GetAllResources {
    int64 tenantId = 1;
    string clientId = 2;
    ResourceTypes resource_type = 3;
}

message GetAllResourcesResponse {
    repeated Agent agents = 1;
    repeated UserRepresentation users = 2;
}

message DeleteExternalIDPsRequest {
    int64 tenant_id= 1;
    string client_id = 2;
    repeated string user_id=3;
}

message GetExternalIDPsRequest {
    int64 tenant_id= 1;
    string client_id = 2;
    string user_id=3;
}


message ExternalIDPLink {
    string provider_alias = 1;
    string provider_user_id =2;
    string provider_username = 3;
}

message GetExternalIDPsResponse {
  repeated   ExternalIDPLink idp_links = 1;
}

message AddExternalIDPLinksRequest {
   repeated ExternalIDPLink idp_links = 1;
   int64 tenant_id= 2;
   string client_id = 3;
}
