syntax = "proto3"; option java_multiple_files = true; option java_package = "com.github.saturn_xiv.palm.plugins.nut.v1"; package palm.nut.v1; import "google/protobuf/empty.proto"; import "google/protobuf/timestamp.proto"; import "google/protobuf/duration.proto"; // ---------------------------------------------------------------------------- message IdRequest { int32 id = 1; } message Resource { string type = 1; optional int32 id = 2; } message Permission { oneof subject { string user = 1; string role = 2; } string operation = 11; Resource resource = 12; } // ---------------------------------------------------------------------------- message Pager { int32 page = 1; int32 size = 2; } message Pagination { int32 page = 1; int32 size = 2; int32 total = 3; bool has_next = 11; bool has_previous = 12; } // ---------------------------------------------------------------------------- message MediaContent { enum Editor { TEXTAREA = 0; QUILL = 1; } enum Status { Publish = 0; Draft = 1; Pending = 2; Private = 3; Future = 4; Trash = 99; } Editor editor = 1; string body = 2; Status status = 3; } // ---------------------------------------------------------------------------- message SmsTask { string from = 1; repeated string to = 2; string body = 3; } message EmailTask { enum ContentType { TEXT_PLAIN = 0; TEXT_HTML = 1; } message Attachment { string name = 1; ContentType content_type = 2; bytes payload = 11; } string subject = 1; string body = 2; ContentType content_type = 3; string to = 11; repeated string cc = 12; repeated string bcc = 13; repeated Attachment attachments = 21; } // ---------------------------------------------------------------------------- message UserDetail { string nick_name = 1; string real_name = 2; string home = 11; } service User { rpc SignIn(UserSignInRequest) returns (UserSignInResponse) {} rpc SignUp(UserSignUpRequest) returns (google.protobuf.Empty) {} rpc ConfirmByEmail(UserEmailRequest) returns (google.protobuf.Empty) {} rpc ConfirmByToken(UserTokenRequest) returns (google.protobuf.Empty) {} rpc UnlockByEmail(UserEmailRequest) returns (google.protobuf.Empty) {} rpc UnlockByToken(UserTokenRequest) returns (google.protobuf.Empty) {} rpc ForgotPassword(UserEmailRequest) returns (google.protobuf.Empty) {} rpc ResetPassword(UserResetPasswordRequest) returns (google.protobuf.Empty) {} rpc Refresh(google.protobuf.Duration) returns (UserSignInResponse) {} rpc Logs(UserLogsRequest) returns (UserLogsResponse) {} rpc SetProfile(UserSetProfileRequest) returns (google.protobuf.Empty) {} rpc ChangePassword(UserChangePasswordRequest) returns (google.protobuf.Empty) {} rpc SignOut(google.protobuf.Empty) returns (google.protobuf.Empty) {} rpc Index(Pager) returns (UserIndexResponse) {} rpc Show(UserQueryRequest) returns (UserIndexResponse.Item) {} rpc Disable(UserQueryRequest) returns (google.protobuf.Empty) {} rpc Enable(UserQueryRequest) returns (google.protobuf.Empty) {} rpc Lock(UserQueryRequest) returns (google.protobuf.Empty) {} rpc Unlock(UserQueryRequest) returns (google.protobuf.Empty) {} rpc Confirm(UserQueryRequest) returns (google.protobuf.Empty) {} rpc SetPassword(UserSetPasswordRequest) returns (google.protobuf.Empty) {} } message UserQueryRequest { message Provider { enum Type { EMAIL = 0; GMAIL = 1; WECHAT = 2; FACEBOOK = 3; GITHUB = 4; } Type type = 1; string id = 2; } oneof who { string uid = 1; string nick_name = 2; Provider provider = 3; } } message UserSignInRequest { UserQueryRequest query = 1; string password = 2; google.protobuf.Duration ttl = 11; } message UserSignInResponse { string token = 1; string real_name = 2; repeated string roles = 11; Permission permissions = 12; } message UserSignUpRequest { string real_name = 1; string nick_name = 2; string email = 3; string password = 4; string lang = 11; string time_zone = 12; string home = 21; } message UserEmailRequest { UserQueryRequest query = 1; string home = 9; } message UserTokenRequest { string token = 1; } message UserResetPasswordRequest { string token = 1; string password = 2; } message UserSetPasswordRequest { int32 user = 1; string password = 2; } message UserSetProfileRequest { string real_name = 1; string avatar = 2; string time_zone = 8; string lang = 9; string wechat = 11; string phone = 12; } message UserGetProfileResponse { string real_name = 1; string avatar = 2; string nick_name = 3; string email = 4; string time_zone = 8; string lang = 9; string wechat = 11; string phone = 12; } message UserLogsRequest { Pager pager = 1; optional UserLogsResponse.Item.Level level = 11; optional string ip = 12; } message UserLogsResponse { message Item { enum Level { DEBUG = 0; INFO = 1; WARNING = 2; ERROR = 3; PANIC = 4; } int32 id = 1; int32 user_id = 2; string ip = 3; Level level = 4; string message = 5; Resource resource = 6; google.protobuf.Timestamp created_at = 11; } Pagination pagination = 1; repeated Item items = 11; } message UserChangePasswordRequest { string current_password = 1; string new_password = 2; } message UserIndexResponse { message Item { int32 id = 1; string uid = 2; string email = 3; string nick_name = 4; string real_name = 5; string provider_type = 6; google.protobuf.Timestamp updated_at = 9; optional google.protobuf.Timestamp last_sign_in_at = 11; optional string last_sign_in_ip = 12; optional google.protobuf.Timestamp current_sign_in_at = 13; optional string current_sign_in_ip = 14; int32 sign_in_count = 19; string lang = 21; string time_zone = 22; string avatar = 23; optional google.protobuf.Timestamp confirmed_at = 27; optional google.protobuf.Timestamp locked_at = 28; optional google.protobuf.Timestamp deleted_at = 29; } Pagination pagination = 1; repeated Item items = 11; } // ---------------------------------------------------------------------------- service Attachment { rpc Index(Pager) returns (AttachmetIndexResponse) {} rpc Destroy(IdRequest) returns (google.protobuf.Empty) {} rpc Show(AttachemtShowRequest) returns (AttachemtShowResponse) {} } message AttachemtShowRequest { int32 id = 1; google.protobuf.Duration ttl = 2; } message AttachemtShowResponse { AttachmetIndexResponse.Item item = 1; string url = 2; } message AttachmetIndexResponse { message Item { int32 id = 1; string bucket = 2; string name = 3; string title = 4; int64 size = 5; string content_type = 6; string region = 7; MediaContent.Status status = 8; google.protobuf.Timestamp updated_at = 11; } Pagination pagination = 1; repeated Item items = 11; } // ---------------------------------------------------------------------------- service Policy { rpc GetAllRoles(google.protobuf.Empty) returns (PolicyRoleListResponse) {} rpc GetAllUsers(google.protobuf.Empty) returns (PolicyUserListResponse) {} rpc DeleteUser(PolicyUserRequest) returns (google.protobuf.Empty) {} rpc DeleteRole(PolicyRoleRequest) returns (google.protobuf.Empty) {} rpc GetRolesForUser(PolicyUserRequest) returns (PolicyRoleListResponse) {} rpc GetUsersForRole(PolicyRoleRequest) returns (PolicyUserListResponse) {} rpc AddRolesForUser(PolicyAddRolesForUserRequest) returns (google.protobuf.Empty) {} rpc DeleteRolesForUser(PolicyDeleteRolesForUserRequest) returns (google.protobuf.Empty) {} rpc GetImplicitRolesForUser(PolicyUserRequest) returns (PolicyRoleListResponse) {} rpc GetImplicitUsersForRole(PolicyRoleRequest) returns (PolicyRoleListResponse) {} rpc GetPermissionsForUser(PolicyUserRequest) returns (PolicyPermissionsResponse) {} rpc GetPermissionsForRole(PolicyRoleRequest) returns (PolicyPermissionsResponse) {} rpc GetImplicitPermissionsForUser(PolicyUserRequest) returns (PolicyPermissionsResponse) {} rpc GetImplicitPermissionsForRole(PolicyRoleRequest) returns (PolicyPermissionsResponse) {} rpc GetImplicitResourcesForUser(PolicyUserRequest) returns (PolicyResourceResponse) {} rpc GetImplicitResourcesForRole(PolicyRoleRequest) returns (PolicyResourceResponse) {} rpc AddPermissions(PolicyPermissionsRequest) returns (google.protobuf.Empty) { } rpc DeletePermissions(PolicyPermissionsRequest) returns (google.protobuf.Empty) {} } message PolicyUserRequest { string code = 1; } message PolicyUserListResponse { repeated string items = 1; } message PolicyRoleRequest { string code = 1; } message PolicyRoleListResponse { repeated string items = 1; } message PolicyAddRolesForUserRequest { string user = 1; repeated string roles = 2; google.protobuf.Timestamp not_before = 11; google.protobuf.Timestamp expired_at = 12; } message PolicyDeleteRolesForUserRequest { string user = 1; repeated string roles = 2; } message PolicyPermissionsRequest { repeated Permission items = 1; } message PolicyPermissionsResponse { repeated Permission items = 1; } message PolicyResourceResponse { repeated Resource items = 1; } // ---------------------------------------------------------------------------- // ---------------------------------------------------------------------------- service Locale { rpc Set(LocaleSetRequest) returns (google.protobuf.Empty) {} rpc Get(LocaleGetRequest) returns (LocaleIndexResponse.Item) {} rpc Index(Pager) returns (LocaleIndexResponse) {} rpc Destroy(IdRequest) returns (google.protobuf.Empty) {} } message LocaleIndexResponse { message Item { int32 id = 1; string lang = 2; string code = 3; string message = 4; google.protobuf.Timestamp updated_at = 9; } repeated Item items = 1; Pagination pagination = 9; } message LocaleGetRequest { string lang = 1; string code = 2; } message LocaleSetRequest { string lang = 1; string code = 2; string message = 3; } // ---------------------------------------------------------------------------- service Setting { rpc Set(SettingSetRequest) returns (google.protobuf.Empty) {} rpc Get(SettingGetRequest) returns (SettingGetResponse) {} } message SettingGetResponse { bytes value = 1; } message SettingGetRequest { optional int32 user = 1; string key = 2; } message SettingSetRequest { optional int32 user = 1; string key = 2; bytes value = 3; bool encrypt = 9; } // ---------------------------------------------------------------------------- // ---------------------------------------------------------------------------- service Site { rpc SetMaintenanceMode(SiteMaintenanceModeRequest) returns (google.protobuf.Empty) {} rpc Install(SiteInstallRequest) returns (google.protobuf.Empty) {} rpc ClearCache(google.protobuf.Empty) returns (google.protobuf.Empty) {} rpc Layout(google.protobuf.Empty) returns (SiteLayoutResponse) {} rpc SetAuthor(SiteLayoutResponse.Author) returns (google.protobuf.Empty) {} rpc SetCopyright(SiteSetCopyrightRequest) returns (google.protobuf.Empty) {} rpc SetKeywords(SiteSetKeywordsRequest) returns (google.protobuf.Empty) {} rpc SetInfo(SiteSetInfoRequest) returns (google.protobuf.Empty) {} rpc SetLogo(SiteSetLogoRequest) returns (google.protobuf.Empty) {} rpc SetAws(AwsProfile) returns (google.protobuf.Empty) {} rpc GetAws(google.protobuf.Empty) returns (AwsProfile) {} rpc TestAwsS3(google.protobuf.Empty) returns (SiteAwsS3TestResponse) {} rpc SetSmtp(SmtpProfile) returns (google.protobuf.Empty) {} rpc GetSmtp(google.protobuf.Empty) returns (SmtpProfile) {} rpc TestSmtp(SiteSmtpTestRequst) returns (google.protobuf.Empty) {} rpc SetBing(BingProfile) returns (google.protobuf.Empty) {} rpc GetBing(google.protobuf.Empty) returns (BingProfile) {} rpc SetGoogle(GoogleProfile) returns (google.protobuf.Empty) {} rpc GetGoogle(google.protobuf.Empty) returns (GoogleProfile) {} rpc SetBaidu(BaiduProfile) returns (google.protobuf.Empty) {} rpc GetBaidu(google.protobuf.Empty) returns (BaiduProfile) {} rpc Status(google.protobuf.Empty) returns (SiteStatusResponse) {} rpc NewLeaveWord(SiteNewLeaveWordRequest) returns (google.protobuf.Empty) {} rpc IndexLeaveWord(Pager) returns (SiteIndexLeaveWordResponse) {} rpc DestroyLeaveWord(IdRequest) returns (google.protobuf.Empty) {} rpc IndexNotification(Pager) returns (SiteIndexNotificationResponse) {} } message SiteMaintenanceModeRequest { message Item { google.protobuf.Duration duration = 1; string reason = 2; } optional Item item = 1; } message SiteInstallRequest { UserSignUpRequest user = 1; } message AwsProfile { string region = 1; optional string endpoint = 2; string access_key_id = 3; string secret_access_key = 4; } message SiteAwsS3TestResponse { repeated string buckets = 1; } message SiteSmtpTestRequst { string to = 1; string subject = 2; string body = 3; } message SiteSetLogoRequest { string url = 1; } message SiteSetCopyrightRequest { string payload = 1; } message SiteSetKeywordsRequest { repeated string items = 1; } message SiteSetInfoRequest { string title = 1; string subhead = 2; string description = 3; } message SiteLayoutResponse { message Author { string name = 1; string email = 2; } string title = 1; string subhead = 2; repeated string keywords = 3; string description = 4; Author author = 5; string copyright = 6; string logo = 7; repeated string languages = 9; } message SiteNewLeaveWordRequest { string body = 1; } message SiteIndexLeaveWordResponse { message Item { int32 id = 1; string lang = 2; string ip = 3; string body = 4; google.protobuf.Timestamp created_at = 9; } repeated Item items = 1; Pagination pagination = 9; } message GoogleProfile { // https://developers.google.com/recaptcha/intro message ReCaptcha { string site_key = 1; string secret = 2; } optional string site_verify_id = 1; optional ReCaptcha re_captcha = 2; } message BaiduProfile { message SiteVerify { string id = 1; string content = 2; } optional SiteVerify site_verify = 1; } message BingProfile { optional string site_verify_id = 1; } message SmtpProfile { string host = 1; uint32 port = 2; string user = 3; string password = 4; string cc = 5; string bcc = 6; } message SiteIndexNotificationResponse { message Item { oneof message { EmailTask email = 1; SmsTask sms = 2; } google.protobuf.Timestamp created_at = 19; } repeated Item items = 1; Pagination pagination = 9; } message SiteStatusResponse { message Database { string name = 1; string size = 2; } message PostgreSql { string version = 1; google.protobuf.Timestamp now = 2; repeated Database databases = 9; } message MySql { uint64 size = 1; string version = 2; } message Redis { message Item { string key = 1; int64 ttl = 2; }; string info = 1; repeated Item items = 2; } message RabbitMq { string protocol = 1; } message OpenSearch { string url = 1; string info = 2; } message Health { string name = 1; string status = 2; } message System { string version = 1; string cpu = 2; string memory = 3; string boot = 4; string disk = 5; string load = 6; string fs = 7; string swap = 8; string uptime = 9; string network = 10; } PostgreSql postgresql = 1; MySql mysql = 2; Redis redis = 3; RabbitMq rabbitmq = 4; OpenSearch opensearch = 5; System system = 11; repeated Health healthes = 21; } // ---------------------------------------------------------------------------- service ShorterLink { rpc Create(ShorterLinkCreateRequest) returns (google.protobuf.Empty) {} rpc Update(ShorterLinkUpdateRequest) returns (google.protobuf.Empty) {} rpc Destroy(IdRequest) returns (google.protobuf.Empty) {} rpc Index(Pager) returns (ShorterLinkIndexResponse) {} } message ShorterLinkIndexResponse { message Item { int32 id = 1; string url = 2; string details = 3; google.protobuf.Timestamp updated_at = 11; } Pagination pagination = 1; repeated Item items = 11; } message ShorterLinkCreateRequest { string url = 1; string details = 2; } message ShorterLinkUpdateRequest { int32 id = 1; string url = 2; string details = 3; } // ---------------------------------------------------------------------------- service Tag { rpc Create(TagCreateRequest) returns (google.protobuf.Empty) {} rpc Update(TagUpdateRequest) returns (google.protobuf.Empty) {} rpc Destroy(IdRequest) returns (google.protobuf.Empty) {} rpc Index(google.protobuf.Empty) returns (TagIndexResponse) {} } message TagIndexResponse { message Item { int32 id = 1; string code = 2; int32 priority = 3; google.protobuf.Timestamp updated_at = 11; } repeated Item items = 1; } message TagCreateRequest { string code = 1; int32 priority = 11; } message TagUpdateRequest { int32 id = 1; string code = 2; int32 priority = 11; } // ---------------------------------------------------------------------------- service Category { rpc Create(CategoryCreateRequest) returns (google.protobuf.Empty) {} rpc Update(CategoryUpdateRequest) returns (google.protobuf.Empty) {} rpc Destroy(IdRequest) returns (google.protobuf.Empty) {} rpc Index(Pager) returns (CategoryIndexResponse) {} } message CategoryIndexResponse { message Item { int32 id = 1; string code = 2; optional int32 parent_id = 3; int32 priority = 4; google.protobuf.Timestamp updated_at = 11; } Pagination pagination = 1; repeated Item items = 11; } message CategoryCreateRequest { string lang = 1; string code = 2; optional int32 parent_id = 3; int32 priority = 11; } message CategoryUpdateRequest { int32 id = 1; string code = 2; optional int32 parent_id = 3; int32 priority = 11; } // ----------------------------------------------------------------------------