github.com/masterhung0112/hk_server/v5@v5.0.0-20220302090640-ec71aef15e1c/api4/shared_channel.go (about)

     1  // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
     2  // See LICENSE.txt for license information.
     3  
     4  package api4
     5  
     6  import (
     7  	"encoding/json"
     8  	"net/http"
     9  
    10  	"github.com/masterhung0112/hk_server/v5/model"
    11  )
    12  
    13  func (api *API) InitSharedChannels() {
    14  	api.BaseRoutes.SharedChannels.Handle("/{team_id:[A-Za-z0-9]+}", api.ApiSessionRequired(getSharedChannels)).Methods("GET")
    15  	api.BaseRoutes.SharedChannels.Handle("/remote_info/{remote_id:[A-Za-z0-9]+}", api.ApiSessionRequired(getRemoteClusterInfo)).Methods("GET")
    16  }
    17  
    18  func getSharedChannels(c *Context, w http.ResponseWriter, r *http.Request) {
    19  	c.RequireTeamId()
    20  	if c.Err != nil {
    21  		return
    22  	}
    23  
    24  	// make sure remote cluster service is enabled.
    25  	if _, appErr := c.App.GetRemoteClusterService(); appErr != nil {
    26  		c.Err = appErr
    27  		return
    28  	}
    29  
    30  	opts := model.SharedChannelFilterOpts{
    31  		TeamId: c.Params.TeamId,
    32  	}
    33  
    34  	channels, appErr := c.App.GetSharedChannels(c.Params.Page, c.Params.PerPage, opts)
    35  	if appErr != nil {
    36  		c.Err = appErr
    37  		return
    38  	}
    39  
    40  	b, err := json.Marshal(channels)
    41  	if err != nil {
    42  		c.SetJSONEncodingError()
    43  		return
    44  	}
    45  	w.Write(b)
    46  }
    47  
    48  func getRemoteClusterInfo(c *Context, w http.ResponseWriter, r *http.Request) {
    49  	c.RequireRemoteId()
    50  	if c.Err != nil {
    51  		return
    52  	}
    53  
    54  	// make sure remote cluster service is enabled.
    55  	if _, appErr := c.App.GetRemoteClusterService(); appErr != nil {
    56  		c.Err = appErr
    57  		return
    58  	}
    59  
    60  	// GetRemoteClusterForUser will only return a remote if the user is a member of at
    61  	// least one channel shared by the remote. All other cases return error.
    62  	rc, appErr := c.App.GetRemoteClusterForUser(c.Params.RemoteId, c.AppContext.Session().UserId)
    63  	if appErr != nil {
    64  		c.Err = appErr
    65  		return
    66  	}
    67  
    68  	remoteInfo := rc.ToRemoteClusterInfo()
    69  
    70  	b, err := json.Marshal(remoteInfo)
    71  	if err != nil {
    72  		c.SetJSONEncodingError()
    73  		return
    74  	}
    75  	w.Write(b)
    76  }