* Posts * Add missing translation * Fix internal store marshaling * [MM-22051] Remove To/From JSON (Channels) (#18116) * Channels * Channel members * ChannelSearch * Channel categories, list, sidebar, stats, view * Fix conversions * [MM-22051] Remove To/From JSON (Users) (#18121) * User related structs * Fix return * Team related structures (#18127) * [MM-22051] Remove To/From JSON (Status, Bot, Reaction, Thread, FileInfo) (#18130) * Status * Bot * Reaction * Thread * FileInfo * Some fixes * Translations update from Weblate (#18143) * Translated using Weblate (German) Currently translated at 100.0% (2309 of 2309 strings) Translation: mattermost-languages-shipped/mattermost-server Translate-URL: https://translate.mattermost.com/projects/mattermost/mattermost-server_master/de/ * Translated using Weblate (Turkish) Currently translated at 100.0% (2309 of 2309 strings) Translation: mattermost-languages-shipped/mattermost-server Translate-URL: https://translate.mattermost.com/projects/mattermost/mattermost-server_master/tr/ * Translated using Weblate (Hungarian) Currently translated at 100.0% (2309 of 2309 strings) Translation: mattermost-languages-shipped/mattermost-server Translate-URL: https://translate.mattermost.com/projects/mattermost/mattermost-server_master/hu/ * Update translation files Updated by "Cleanup translation files" hook in Weblate. Translation: mattermost-languages-shipped/mattermost-server Translate-URL: https://translate.mattermost.com/projects/mattermost/mattermost-server_master/ Update translation files Updated by "Cleanup translation files" hook in Weblate. Translation: mattermost-languages-shipped/mattermost-server Translate-URL: https://translate.mattermost.com/projects/mattermost/mattermost-server_master/ Update translation files Updated by "Cleanup translation files" hook in Weblate. Translation: mattermost-languages-shipped/mattermost-server Translate-URL: https://translate.mattermost.com/projects/mattermost/mattermost-server_master/ Update translation files Updated by "Cleanup translation files" hook in Weblate. Translation: mattermost-languages-shipped/mattermost-server Translate-URL: https://translate.mattermost.com/projects/mattermost/mattermost-server_master/ * Translated using Weblate (German) Currently translated at 100.0% (2301 of 2301 strings) Translation: mattermost-languages-shipped/mattermost-server Translate-URL: https://translate.mattermost.com/projects/mattermost/mattermost-server_master/de/ * Translated using Weblate (Turkish) Currently translated at 100.0% (2301 of 2301 strings) Translation: mattermost-languages-shipped/mattermost-server Translate-URL: https://translate.mattermost.com/projects/mattermost/mattermost-server_master/tr/ * Translated using Weblate (Hungarian) Currently translated at 100.0% (2301 of 2301 strings) Translation: mattermost-languages-shipped/mattermost-server Translate-URL: https://translate.mattermost.com/projects/mattermost/mattermost-server_master/hu/ * Translated using Weblate (English (Australia)) Currently translated at 100.0% (2301 of 2301 strings) Translation: mattermost-languages-shipped/mattermost-server Translate-URL: https://translate.mattermost.com/projects/mattermost/mattermost-server_master/en_AU/ * Translated using Weblate (Bulgarian) Currently translated at 100.0% (2301 of 2301 strings) Translation: mattermost-languages-shipped/mattermost-server Translate-URL: https://translate.mattermost.com/projects/mattermost/mattermost-server_master/bg/ * Translated using Weblate (Japanese) Currently translated at 100.0% (2301 of 2301 strings) Translation: mattermost-languages-shipped/mattermost-server Translate-URL: https://translate.mattermost.com/projects/mattermost/mattermost-server_master/ja/ * Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (2301 of 2301 strings) Translation: mattermost-languages-shipped/mattermost-server Translate-URL: https://translate.mattermost.com/projects/mattermost/mattermost-server_master/zh_Hans/ Co-authored-by: JtheBAB <srast@bioc.uzh.ch> Co-authored-by: Kaya Zeren <kayazeren@gmail.com> Co-authored-by: Tóth Csaba // Online ERP Hungary Kft <csaba.toth@online-erp.hu> Co-authored-by: Matthew Williams <Matthew.Williams@outlook.com.au> Co-authored-by: Nikolai Zahariev <nikolaiz@yahoo.com> Co-authored-by: kaakaa <stooner.hoe@gmail.com> Co-authored-by: aeomin <lin@aeomin.net> Co-authored-by: Weblate (bot) <hosted@weblate.org> Co-authored-by: JtheBAB <srast@bioc.uzh.ch> Co-authored-by: Kaya Zeren <kayazeren@gmail.com> Co-authored-by: Tóth Csaba // Online ERP Hungary Kft <csaba.toth@online-erp.hu> Co-authored-by: Matthew Williams <Matthew.Williams@outlook.com.au> Co-authored-by: Nikolai Zahariev <nikolaiz@yahoo.com> Co-authored-by: kaakaa <stooner.hoe@gmail.com> Co-authored-by: aeomin <lin@aeomin.net> * [MM-22051] Remove To/From JSON methods from model (#18138) * Scheme * Role * Session * Config * Status * Fix logic * Emoji * GuestsInvite * Group * Command * ClusterInfo * License * Job * System * Plugin * Command2 * IncomingWebhook * OutgoingWebhook * Fix tests * Update traslation * Some fixes * Add missing return * Simplify * Make Config.ToJSONFiltered() return []byte * Make Busy.ToJSON() return []byte * Include error in log * Split logic * [MM-22051] Remove To/From JSON (final) (#18150) * SwitchRequest * PluginEventData * Permalink * PushNotification * SuggestCommand * PluginsResponse * WebSocketMessage * RemoteCluster * SharedChannel * PluginStatuses * InitialLoad * ClusterDiscovery * ClusterStats * MfaSecret * GroupSyncable * SAML * WebSocketRequest * TypingRequest * SecurityBulletin * OAuthApp * IntegrationAction * DataRetention * Preference * FileInfoList * Compliance * Preferences * FileInfoSearchResults * TermsOfService * InstallMarketplacePluginRequest * GitLabUser * UploadSessions * Remove unused helpers * Fix tests * [MM-23280] Fix linting for ToJSON/FromJSON (#18153) * SwitchRequest * PluginEventData * Permalink * PushNotification * SuggestCommand * PluginsResponse * WebSocketMessage * RemoteCluster * SharedChannel * PluginStatuses * InitialLoad * ClusterDiscovery * ClusterStats * MfaSecret * GroupSyncable * SAML * WebSocketRequest * TypingRequest * SecurityBulletin * OAuthApp * IntegrationAction * DataRetention * Preference * FileInfoList * Compliance * Preferences * FileInfoSearchResults * TermsOfService * InstallMarketplacePluginRequest * GitLabUser * UploadSessions * Remove unused helpers * Fix tests * Fix linting for ToJSON/FromJSON * Fix conversions Co-authored-by: Weblate (bot) <hosted@weblate.org> Co-authored-by: JtheBAB <srast@bioc.uzh.ch> Co-authored-by: Kaya Zeren <kayazeren@gmail.com> Co-authored-by: Tóth Csaba // Online ERP Hungary Kft <csaba.toth@online-erp.hu> Co-authored-by: Matthew Williams <Matthew.Williams@outlook.com.au> Co-authored-by: Nikolai Zahariev <nikolaiz@yahoo.com> Co-authored-by: kaakaa <stooner.hoe@gmail.com> Co-authored-by: aeomin <lin@aeomin.net> Co-authored-by: Mattermod <mattermod@users.noreply.github.com>
128 строки
4.5 KiB
Go
128 строки
4.5 KiB
Go
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
|
|
// See LICENSE.txt for license information.
|
|
|
|
package model
|
|
|
|
import (
|
|
"bytes"
|
|
"encoding/base64"
|
|
"encoding/json"
|
|
"io"
|
|
"net/url"
|
|
"strconv"
|
|
|
|
"github.com/pkg/errors"
|
|
)
|
|
|
|
// BaseMarketplacePlugin is a Mattermost plugin received from the Marketplace server.
|
|
type BaseMarketplacePlugin struct {
|
|
HomepageURL string `json:"homepage_url"`
|
|
IconData string `json:"icon_data"`
|
|
DownloadURL string `json:"download_url"`
|
|
ReleaseNotesURL string `json:"release_notes_url"`
|
|
Labels []MarketplaceLabel `json:"labels,omitempty"`
|
|
Hosting string `json:"hosting"` // Indicated if the plugin is limited to a certain hosting type
|
|
AuthorType string `json:"author_type"` // The maintainer of the plugin
|
|
ReleaseStage string `json:"release_stage"` // The stage in the software release cycle that the plugin is in
|
|
Enterprise bool `json:"enterprise"` // Indicated if the plugin is an enterprise plugin
|
|
Signature string `json:"signature"` // Signature represents a signature of a plugin saved in base64 encoding.
|
|
Manifest *Manifest `json:"manifest"`
|
|
}
|
|
|
|
// MarketplaceLabel represents a label shown in the Marketplace UI.
|
|
type MarketplaceLabel struct {
|
|
Name string `json:"name"`
|
|
Description string `json:"description"`
|
|
URL string `json:"url"`
|
|
Color string `json:"color"`
|
|
}
|
|
|
|
// MarketplacePlugin is a state aware Marketplace plugin.
|
|
type MarketplacePlugin struct {
|
|
*BaseMarketplacePlugin
|
|
InstalledVersion string `json:"installed_version"`
|
|
}
|
|
|
|
// BaseMarketplacePluginsFromReader decodes a json-encoded list of plugins from the given io.Reader.
|
|
func BaseMarketplacePluginsFromReader(reader io.Reader) ([]*BaseMarketplacePlugin, error) {
|
|
plugins := []*BaseMarketplacePlugin{}
|
|
decoder := json.NewDecoder(reader)
|
|
|
|
if err := decoder.Decode(&plugins); err != nil && err != io.EOF {
|
|
return nil, err
|
|
}
|
|
|
|
return plugins, nil
|
|
}
|
|
|
|
// MarketplacePluginsFromReader decodes a json-encoded list of plugins from the given io.Reader.
|
|
func MarketplacePluginsFromReader(reader io.Reader) ([]*MarketplacePlugin, error) {
|
|
plugins := []*MarketplacePlugin{}
|
|
decoder := json.NewDecoder(reader)
|
|
|
|
if err := decoder.Decode(&plugins); err != nil && err != io.EOF {
|
|
return nil, err
|
|
}
|
|
|
|
return plugins, nil
|
|
}
|
|
|
|
// DecodeSignature Decodes signature and returns ReadSeeker.
|
|
func (plugin *BaseMarketplacePlugin) DecodeSignature() (io.ReadSeeker, error) {
|
|
signatureBytes, err := base64.StdEncoding.DecodeString(plugin.Signature)
|
|
if err != nil {
|
|
return nil, errors.Wrap(err, "Unable to decode base64 signature.")
|
|
}
|
|
return bytes.NewReader(signatureBytes), nil
|
|
}
|
|
|
|
// MarketplacePluginFilter describes the parameters to request a list of plugins.
|
|
type MarketplacePluginFilter struct {
|
|
Page int
|
|
PerPage int
|
|
Filter string
|
|
ServerVersion string
|
|
BuildEnterpriseReady bool
|
|
EnterprisePlugins bool
|
|
Cloud bool
|
|
LocalOnly bool
|
|
Platform string
|
|
PluginId string
|
|
ReturnAllVersions bool
|
|
}
|
|
|
|
// ApplyToURL modifies the given url to include query string parameters for the request.
|
|
func (filter *MarketplacePluginFilter) ApplyToURL(u *url.URL) {
|
|
q := u.Query()
|
|
q.Add("page", strconv.Itoa(filter.Page))
|
|
if filter.PerPage > 0 {
|
|
q.Add("per_page", strconv.Itoa(filter.PerPage))
|
|
}
|
|
q.Add("filter", filter.Filter)
|
|
q.Add("server_version", filter.ServerVersion)
|
|
q.Add("build_enterprise_ready", strconv.FormatBool(filter.BuildEnterpriseReady))
|
|
q.Add("enterprise_plugins", strconv.FormatBool(filter.EnterprisePlugins))
|
|
q.Add("cloud", strconv.FormatBool(filter.Cloud))
|
|
q.Add("local_only", strconv.FormatBool(filter.LocalOnly))
|
|
q.Add("platform", filter.Platform)
|
|
q.Add("plugin_id", filter.PluginId)
|
|
q.Add("return_all_versions", strconv.FormatBool(filter.ReturnAllVersions))
|
|
u.RawQuery = q.Encode()
|
|
}
|
|
|
|
// InstallMarketplacePluginRequest struct describes parameters of the requested plugin.
|
|
type InstallMarketplacePluginRequest struct {
|
|
Id string `json:"id"`
|
|
Version string `json:"version"`
|
|
}
|
|
|
|
// PluginRequestFromReader decodes a json-encoded plugin request from the given io.Reader.
|
|
func PluginRequestFromReader(reader io.Reader) (*InstallMarketplacePluginRequest, error) {
|
|
var r *InstallMarketplacePluginRequest
|
|
err := json.NewDecoder(reader).Decode(&r)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return r, nil
|
|
}
|