add set background and icon of hub functions

This commit is contained in:
2026-05-03 19:30:22 +02:00
parent c0d4483154
commit 22e2d18810
5 changed files with 131 additions and 23 deletions
+26 -22
View File
@@ -10,31 +10,35 @@ import (
)
var (
Port uint32 = 8080
MaxDirectMsgCache uint32 = 32
MaxHubChannelMsgCache uint32 = 16
FileStorageBucketName string = "communicator"
MaxRequestBytes uint32 = 4 << 10
MaxRequestWithFileBytes uint32 = 1 << 30
MaxRequestWithAvatarBytes uint32 = 1 << 20
MaxRequestWithProfileBgBytes uint32 = 4 << 20
FileProcessingPartBytes uint64 = 12 << 20
FileProcessingThreads uint = 3
FileDownloadLinkTtl time.Duration = 24 * time.Hour
Port uint32 = 8080
MaxDirectMsgCache uint32 = 32
MaxHubChannelMsgCache uint32 = 16
FileStorageBucketName string = "communicator"
MaxRequestBytes uint32 = 4 << 10
MaxRequestWithFileBytes uint32 = 1 << 30
MaxRequestWithAvatarBytes uint32 = 1 << 20
MaxRequestWithProfileBgBytes uint32 = 4 << 20
MaxRequestWithHubIconBytes uint32 = 1 << 20
MaxRequestWithHubBackgroundBytes uint32 = 10 << 20
FileProcessingPartBytes uint64 = 12 << 20
FileProcessingThreads uint = 3
FileDownloadLinkTtl time.Duration = 24 * time.Hour
)
type configFile struct {
Port uint32 `toml:"port"`
MaxDirectMsgCache uint32 `toml:"max_direct_messages_cache"`
MaxHubChannelMsgCache uint32 `toml:"max_hub_channel_msg_cache"`
MaxRequestBytes uint32 `toml:"max_request_bytes"`
MaxRequestWithFileBytes uint32 `toml:"max_request_with_file_bytes"`
MaxRequestWithAvatarBytes uint32 `toml:"max_request_with_avatar_bytes"`
MaxRequestWithProfileBgBytes uint32 `toml:"max_request_with_profile_bg_bytes"`
FileProcessingPartBytes uint64 `toml:"file_processing_part_bytes"`
FileProcessingThreads uint `toml:"file_processing_threads"`
FileStorageBucketName string `toml:"file_storage_bucket_name"`
FileDownloadLinkTtl time.Duration `toml:"file_download_link_ttl"`
Port uint32 `toml:"port"`
MaxDirectMsgCache uint32 `toml:"max_direct_messages_cache"`
MaxHubChannelMsgCache uint32 `toml:"max_hub_channel_msg_cache"`
MaxRequestBytes uint32 `toml:"max_request_bytes"`
MaxRequestWithFileBytes uint32 `toml:"max_request_with_file_bytes"`
MaxRequestWithAvatarBytes uint32 `toml:"max_request_with_avatar_bytes"`
MaxRequestWithProfileBgBytes uint32 `toml:"max_request_with_profile_bg_bytes"`
MaxRequestWithHubIconBytes uint32 `toml:"max_request_with_hub_icon_bytes"`
MaxRequestWithHubBackgroundBytes uint32 `toml:"max_request_with_hub_background_bytes"`
FileProcessingPartBytes uint64 `toml:"file_processing_part_bytes"`
FileProcessingThreads uint `toml:"file_processing_threads"`
FileStorageBucketName string `toml:"file_storage_bucket_name"`
FileDownloadLinkTtl time.Duration `toml:"file_download_link_ttl"`
}
func LoadConfFile() {
+11
View File
@@ -15,6 +15,8 @@ const (
file
avatar
profileBg
hubIcon
hubBackground
)
func validCheckWithResponseOnFail(response http.ResponseWriter, request *http.Request, pt bodyLimit) bool {
@@ -22,10 +24,19 @@ func validCheckWithResponseOnFail(response http.ResponseWriter, request *http.Re
switch pt {
case file:
maxSize = int64(config.MaxRequestWithFileBytes)
break
case avatar:
maxSize = int64(config.MaxRequestWithAvatarBytes)
break
case profileBg:
maxSize = int64(config.MaxRequestWithProfileBgBytes)
break
case hubIcon:
maxSize = int64(config.MaxRequestWithHubIconBytes)
break
case hubBackground:
maxSize = int64(config.MaxRequestWithHubBackgroundBytes)
break
default:
maxSize = int64(config.MaxRequestBytes)
}
+85
View File
@@ -10,6 +10,7 @@ import (
"go-socket/packages/convertions"
"go-socket/packages/cache"
"go-socket/packages/minio"
"go-socket/packages/types"
"go-socket/packages/wsServer"
@@ -466,6 +467,90 @@ func HandleHubSetColor(response http.ResponseWriter, request *http.Request) {
response.WriteHeader(http.StatusAccepted)
}
func HandleHubSetIcon(response http.ResponseWriter, request *http.Request) {
_, hub, ctx, _, ok := hubPermissionContext(response, request, hubIcon, types.PermissionSetHubIcon)
if !ok {
return
}
file, header, err := request.FormFile("file")
if err != nil {
http.Error(response, "missing file", http.StatusBadRequest)
return
}
defer file.Close()
isImg, contentType, err := isImage(file)
if err != nil || !isImg {
http.Error(response, "invalid file", http.StatusBadRequest)
return
}
key := minio.GetKey(&minio.GetKeyOptions{
MimeType: contentType,
UploadType: minio.HubIcon,
HubId: hub.Id,
})
if err = minio.Upload(ctx, key, file, header.Size, contentType, map[string]string{
"originalName": header.Filename,
}); err != nil {
http.Error(response, "upload failed", http.StatusInternalServerError)
return
}
if hub.IconUrl != "" {
if err = minio.Delete(ctx, hub.IconUrl); err != nil {
minio.Delete(ctx, key)
http.Error(response, "internal server error", http.StatusInternalServerError)
return
}
}
hub.IconUrl = key
response.WriteHeader(http.StatusCreated)
}
func HandleHubSetBg(response http.ResponseWriter, request *http.Request) {
_, hub, ctx, _, ok := hubPermissionContext(response, request, hubBackground, types.PermissionSetHubBg)
if !ok {
return
}
file, header, err := request.FormFile("file")
if err != nil {
http.Error(response, "missing file", http.StatusBadRequest)
return
}
defer file.Close()
isImg, contentType, err := isImage(file)
if err != nil || !isImg {
http.Error(response, "invalid file", http.StatusBadRequest)
return
}
key := minio.GetKey(&minio.GetKeyOptions{
MimeType: contentType,
UploadType: minio.HubBackground,
HubId: hub.Id,
})
if err = minio.Upload(ctx, key, file, header.Size, contentType, map[string]string{
"originalName": header.Filename,
}); err != nil {
http.Error(response, "upload failed", http.StatusInternalServerError)
return
}
if hub.BgUrl != "" {
if err = minio.Delete(ctx, hub.BgUrl); err != nil {
minio.Delete(ctx, key)
http.Error(response, "internal server error", http.StatusInternalServerError)
return
}
}
hub.BgUrl = key
response.WriteHeader(http.StatusCreated)
}
func HandleHubRemove(response http.ResponseWriter, request *http.Request) {
_, hub, _, _, ok := hubPermissionContext(response, request, normal, types.PermissionRemoveHub)
if !ok {
+9
View File
@@ -24,6 +24,8 @@ const (
HubChannelFile
UserAvatar
UserProfileBg
HubIcon
HubBackground
)
type DataTypePrefix string
@@ -33,11 +35,14 @@ const (
HubChannelFilePrefix DataTypePrefix = "hub/"
UserAvatarPrefix DataTypePrefix = "userAvatar/"
UserProfileBgPrefix DataTypePrefix = "userProfileBg/"
HubIconPrefix DataTypePrefix = "hubIcon/"
HubBackgroundPrefix DataTypePrefix = "hubBackground/"
)
type GetKeyOptions struct {
UserId uuid.UUID
ConnectionId uuid.UUID
HubId uuid.UUID
ChannelId uuid.UUID
MimeType string
UploadType DataType
@@ -58,6 +63,10 @@ func GetKey(opts *GetKeyOptions) string {
return string(UserAvatarPrefix) + opts.UserId.String() + key
case UserProfileBg:
return string(UserProfileBgPrefix) + opts.UserId.String() + key
case HubIcon:
return string(HubIconPrefix) + opts.HubId.String() + key
case HubBackground:
return string(HubBackgroundPrefix) + opts.HubId.String() + key
default:
return string(ConnectionFilePrefix) + opts.ConnectionId.String() + key
}