剪切板也是1个用的比较少的功能,移除了喵
This commit is contained in:
1 parent
68c284d043
commit
7d692d2faf
7 files changed
+1
-205
No files matched your search
@@ -1,64 +0,0 @@
|
||||
package clipboard
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"github.com/komari-monitor/komari/database/dbcore"
|
||||
"github.com/komari-monitor/komari/database/models"
|
||||
)
|
||||
|
||||
// CreateClipboard 创建剪贴板记录
|
||||
func CreateClipboard(cb *models.Clipboard) error {
|
||||
db := dbcore.GetDBInstance()
|
||||
cb.CreatedAt = time.Now().UTC()
|
||||
cb.UpdatedAt = cb.CreatedAt
|
||||
return db.Create(cb).Error
|
||||
}
|
||||
|
||||
// GetClipboardByID 根据ID获取剪贴板记录
|
||||
func GetClipboardByID(id int) (*models.Clipboard, error) {
|
||||
var cb models.Clipboard
|
||||
db := dbcore.GetDBInstance()
|
||||
if err := db.First(&cb, id).Error; err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &cb, nil
|
||||
}
|
||||
|
||||
// UpdateClipboardFields 更新剪贴板记录
|
||||
func UpdateClipboardFields(id int, fields map[string]interface{}) error {
|
||||
db := dbcore.GetDBInstance()
|
||||
delete(fields, "created_at")
|
||||
fields["updated_at"] = time.Now().UTC()
|
||||
return db.Model(&models.Clipboard{}).Where("id = ?", id).Updates(fields).Error
|
||||
}
|
||||
|
||||
// DeleteClipboard 删除剪贴板记录
|
||||
func DeleteClipboard(id int) error {
|
||||
db := dbcore.GetDBInstance()
|
||||
// Check if record exists first
|
||||
var cb models.Clipboard
|
||||
if err := db.First(&cb, id).Error; err != nil {
|
||||
return err // Record not found or other error
|
||||
}
|
||||
return db.Delete(&cb).Error
|
||||
}
|
||||
|
||||
// DeleteClipboardBatch 批量删除剪贴板记录
|
||||
func DeleteClipboardBatch(ids []int) error {
|
||||
if len(ids) == 0 {
|
||||
return nil
|
||||
}
|
||||
db := dbcore.GetDBInstance()
|
||||
return db.Where("id IN ?", ids).Delete(&models.Clipboard{}).Error
|
||||
}
|
||||
|
||||
// ListClipboard 列出所有剪贴板记录
|
||||
func ListClipboard() ([]models.Clipboard, error) {
|
||||
var list []models.Clipboard
|
||||
db := dbcore.GetDBInstance()
|
||||
if err := db.Find(&list).Error; err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return list, nil
|
||||
}
|
||||
@@ -450,7 +450,6 @@ func doInitialize() error {
|
||||
&models.User{},
|
||||
&models.Client{},
|
||||
&models.Log{},
|
||||
&models.Clipboard{},
|
||||
&models.OfflineNotification{},
|
||||
&models.PingTask{},
|
||||
&models.OidcProvider{},
|
||||
|
||||
@@ -1,13 +0,0 @@
|
||||
package models
|
||||
|
||||
import "time"
|
||||
|
||||
type Clipboard struct {
|
||||
Id int `json:"id" gorm:"primaryKey;autoIncrement;unique"`
|
||||
Text string `json:"text" gorm:"type:longtext"`
|
||||
Name string `json:"name" gorm:"type:varchar(255)"`
|
||||
Weight int `json:"weight" gorm:"type:int"`
|
||||
Remark string `json:"remark" gorm:"type:text"`
|
||||
CreatedAt time.Time `json:"created_at"`
|
||||
UpdatedAt time.Time `json:"updated_at"`
|
||||
}
|
||||
@@ -35,8 +35,6 @@ var legacyTimestampColumns = [...]timestampColumn{
|
||||
{table: "sessions", column: "expires"},
|
||||
{table: "sessions", column: "created_at"},
|
||||
{table: "logs", column: "time"},
|
||||
{table: "clipboards", column: "created_at"},
|
||||
{table: "clipboards", column: "updated_at"},
|
||||
{table: "offline_notifications", column: "last_notified"},
|
||||
{table: "task_results", column: "finished_at"},
|
||||
{table: "task_results", column: "created_at"},
|
||||
|
||||
@@ -203,17 +203,6 @@ func registerAdminRoutes(r *gin.Engine) {
|
||||
|
||||
g.GET("/logs", jsonRpc.Bind("admin:getLogs", jsonRpc.WithQuery("limit", "page")))
|
||||
|
||||
// clipboard
|
||||
clipboardGroup := g.Group("/clipboard")
|
||||
{
|
||||
clipboardGroup.GET("/:id", jsonRpc.Bind("admin:getClipboard", jsonRpc.WithPath("id")))
|
||||
clipboardGroup.GET("", jsonRpc.Bind("admin:listClipboard"))
|
||||
clipboardGroup.POST("", jsonRpc.Bind("admin:createClipboard"))
|
||||
clipboardGroup.POST("/:id", jsonRpc.Bind("admin:updateClipboard", jsonRpc.WithPath("id")))
|
||||
clipboardGroup.POST("/remove", jsonRpc.Bind("admin:batchDeleteClipboard"))
|
||||
clipboardGroup.POST("/:id/remove", jsonRpc.Bind("admin:deleteClipboard", jsonRpc.WithPath("id")))
|
||||
}
|
||||
|
||||
// plugins: 安装流程通过统一的分片上传接口,启停/列表/日志走 RPC2,市场对齐主题市场。
|
||||
pluginGroup := g.Group("/plugin")
|
||||
{
|
||||
|
||||
@@ -113,7 +113,7 @@ handler 退化为薄适配层:解析 gin 参数 → 调 RPC → 把响应映
|
||||
|
||||
| 命名空间 | 方法(文件) |
|
||||
| --- | --- |
|
||||
| `admin` | client CRUD、ping task、session/settings/weight、notification(load/offline/traffic)、clipboard、provider(messageSender/oidc)、task 查询、system(logs/cloudflared/exec/test) |
|
||||
| `admin` | client CRUD、ping task、session/settings/weight、notification(load/offline/traffic)、provider(messageSender/oidc)、task 查询、system(logs/cloudflared/exec/test) |
|
||||
| `public` | getMe、getNodesInformation、getPublicSettings、getVersion、getClientRecentRecords、getRecordsByUUID、getPingRecords、getPublicPingTasks |
|
||||
| Agent v2 | `agent.report`、`agent.basicInfo`、`agent.pingResult`、`agent.taskResult`、`agent.pull`(`/api/clients/v2/rpc`) |
|
||||
|
||||
|
||||
@@ -1,113 +0,0 @@
|
||||
package jsonrpc
|
||||
|
||||
import (
|
||||
"context"
|
||||
"strconv"
|
||||
|
||||
"github.com/komari-monitor/komari/database/auditlog"
|
||||
clipboardDB "github.com/komari-monitor/komari/database/clipboard"
|
||||
"github.com/komari-monitor/komari/database/models"
|
||||
"github.com/komari-monitor/komari/pkg/rpc"
|
||||
)
|
||||
|
||||
// admin.clipboard.go
|
||||
// 剪贴板 RPC2 方法(admin 命名空间)。
|
||||
|
||||
func init() {
|
||||
reg("getClipboard", adminGetClipboard, "Get a clipboard entry by id")
|
||||
reg("listClipboard", adminListClipboard, "List clipboard entries")
|
||||
reg("createClipboard", adminCreateClipboard, "Create a clipboard entry")
|
||||
reg("updateClipboard", adminUpdateClipboard, "Update a clipboard entry")
|
||||
reg("deleteClipboard", adminDeleteClipboard, "Delete a clipboard entry")
|
||||
reg("batchDeleteClipboard", adminBatchDeleteClipboard, "Batch delete clipboard entries")
|
||||
}
|
||||
|
||||
func adminGetClipboard(_ context.Context, req *rpc.JsonRpcRequest) (any, *rpc.JsonRpcError) {
|
||||
var params struct {
|
||||
ID string `json:"id"`
|
||||
}
|
||||
req.BindParams(¶ms)
|
||||
id, err := strconv.Atoi(params.ID)
|
||||
if err != nil {
|
||||
return nil, rpc.MakeError(rpc.InvalidParams, "Invalid ID", nil)
|
||||
}
|
||||
cb, err := clipboardDB.GetClipboardByID(id)
|
||||
if err != nil {
|
||||
return nil, rpc.MakeError(rpc.InternalError, "Failed to get clipboard: "+err.Error(), nil)
|
||||
}
|
||||
return cb, nil
|
||||
}
|
||||
|
||||
func adminListClipboard(_ context.Context, _ *rpc.JsonRpcRequest) (any, *rpc.JsonRpcError) {
|
||||
list, err := clipboardDB.ListClipboard()
|
||||
if err != nil {
|
||||
return nil, rpc.MakeError(rpc.InternalError, "Failed to list clipboard: "+err.Error(), nil)
|
||||
}
|
||||
return list, nil
|
||||
}
|
||||
|
||||
func adminCreateClipboard(ctx context.Context, req *rpc.JsonRpcRequest) (any, *rpc.JsonRpcError) {
|
||||
var cb models.Clipboard
|
||||
if err := req.BindParams(&cb); err != nil {
|
||||
return nil, rpc.MakeError(rpc.InvalidParams, "Invalid request: "+err.Error(), nil)
|
||||
}
|
||||
if err := clipboardDB.CreateClipboard(&cb); err != nil {
|
||||
return nil, rpc.MakeError(rpc.InternalError, "Failed to create clipboard: "+err.Error(), nil)
|
||||
}
|
||||
actor, ip := auditActor(ctx)
|
||||
auditlog.Log(ip, actor, "create clipboard:"+strconv.Itoa(cb.Id), "info")
|
||||
return cb, nil
|
||||
}
|
||||
|
||||
func adminUpdateClipboard(ctx context.Context, req *rpc.JsonRpcRequest) (any, *rpc.JsonRpcError) {
|
||||
// id 来自路径参数(bridge 注入),其余字段为更新内容。
|
||||
fields := map[string]interface{}{}
|
||||
if err := req.BindParams(&fields); err != nil {
|
||||
return nil, rpc.MakeError(rpc.InvalidParams, "Invalid request: "+err.Error(), nil)
|
||||
}
|
||||
idStr, _ := fields["id"].(string)
|
||||
id, err := strconv.Atoi(idStr)
|
||||
if err != nil {
|
||||
return nil, rpc.MakeError(rpc.InvalidParams, "Invalid ID", nil)
|
||||
}
|
||||
delete(fields, "id") // 路径注入的 id 不作为更新字段
|
||||
if err := clipboardDB.UpdateClipboardFields(id, fields); err != nil {
|
||||
return nil, rpc.MakeError(rpc.InternalError, "Failed to update clipboard: "+err.Error(), nil)
|
||||
}
|
||||
actor, ip := auditActor(ctx)
|
||||
auditlog.Log(ip, actor, "update clipboard:"+strconv.Itoa(id), "info")
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
func adminDeleteClipboard(ctx context.Context, req *rpc.JsonRpcRequest) (any, *rpc.JsonRpcError) {
|
||||
var params struct {
|
||||
ID string `json:"id"`
|
||||
}
|
||||
req.BindParams(¶ms)
|
||||
id, err := strconv.Atoi(params.ID)
|
||||
if err != nil {
|
||||
return nil, rpc.MakeError(rpc.InvalidParams, "Invalid ID", nil)
|
||||
}
|
||||
if err := clipboardDB.DeleteClipboard(id); err != nil {
|
||||
return nil, rpc.MakeError(rpc.InternalError, "Failed to delete clipboard: "+err.Error(), nil)
|
||||
}
|
||||
actor, ip := auditActor(ctx)
|
||||
auditlog.Log(ip, actor, "delete clipboard:"+strconv.Itoa(id), "warn")
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
func adminBatchDeleteClipboard(ctx context.Context, req *rpc.JsonRpcRequest) (any, *rpc.JsonRpcError) {
|
||||
var params struct {
|
||||
IDs []int `json:"ids"`
|
||||
}
|
||||
req.BindParams(¶ms)
|
||||
if len(params.IDs) == 0 {
|
||||
return nil, rpc.MakeError(rpc.InvalidParams, "IDs cannot be empty", nil)
|
||||
}
|
||||
if err := clipboardDB.DeleteClipboardBatch(params.IDs); err != nil {
|
||||
return nil, rpc.MakeError(rpc.InternalError, "Failed to batch delete clipboard: "+err.Error(), nil)
|
||||
}
|
||||
actor, ip := auditActor(ctx)
|
||||
auditlog.Log(ip, actor, "batch delete clipboard: "+strconv.Itoa(len(params.IDs))+" items", "warn")
|
||||
return nil, nil
|
||||
}
|
||||
Reference in new issue
Block a user