github.com/status-im/status-go@v1.1.0/server/server_media.go (about)

     1  package server
     2  
     3  import (
     4  	"database/sql"
     5  	"net/url"
     6  	"strconv"
     7  
     8  	"github.com/status-im/status-go/ipfs"
     9  	"github.com/status-im/status-go/logutils"
    10  	"github.com/status-im/status-go/multiaccounts"
    11  	"github.com/status-im/status-go/protocol/common"
    12  	"github.com/status-im/status-go/services/wallet/thirdparty"
    13  	"github.com/status-im/status-go/signal"
    14  )
    15  
    16  type MediaServer struct {
    17  	Server
    18  
    19  	db              *sql.DB
    20  	downloader      *ipfs.Downloader
    21  	multiaccountsDB *multiaccounts.Database
    22  	walletDB        *sql.DB
    23  }
    24  
    25  // NewMediaServer returns a *MediaServer
    26  func NewMediaServer(db *sql.DB, downloader *ipfs.Downloader, multiaccountsDB *multiaccounts.Database, walletDB *sql.DB) (*MediaServer, error) {
    27  	err := generateMediaTLSCert()
    28  	if err != nil {
    29  		return nil, err
    30  	}
    31  
    32  	s := &MediaServer{
    33  		Server: NewServer(
    34  			globalMediaCertificate,
    35  			Localhost,
    36  			signal.SendMediaServerStarted,
    37  			logutils.ZapLogger().Named("MediaServer"),
    38  		),
    39  		db:              db,
    40  		downloader:      downloader,
    41  		multiaccountsDB: multiaccountsDB,
    42  		walletDB:        walletDB,
    43  	}
    44  	s.SetHandlers(HandlerPatternMap{
    45  		accountImagesPath:                   handleAccountImages(s.multiaccountsDB, s.logger),
    46  		accountInitialsPath:                 handleAccountInitials(s.multiaccountsDB, s.logger),
    47  		audioPath:                           handleAudio(s.db, s.logger),
    48  		contactImagesPath:                   handleContactImages(s.db, s.logger),
    49  		discordAttachmentsPath:              handleDiscordAttachment(s.db, s.logger),
    50  		discordAuthorsPath:                  handleDiscordAuthorAvatar(s.db, s.logger),
    51  		generateQRCode:                      handleQRCodeGeneration(s.multiaccountsDB, s.logger),
    52  		imagesPath:                          handleImage(s.db, s.logger),
    53  		ipfsPath:                            handleIPFS(s.downloader, s.logger),
    54  		LinkPreviewThumbnailPath:            handleLinkPreviewThumbnail(s.db, s.logger),
    55  		LinkPreviewFaviconPath:              handleLinkPreviewFavicon(s.db, s.logger),
    56  		StatusLinkPreviewThumbnailPath:      handleStatusLinkPreviewThumbnail(s.db, s.logger),
    57  		communityTokenImagesPath:            handleCommunityTokenImages(s.db, s.logger),
    58  		communityDescriptionImagesPath:      handleCommunityDescriptionImagesPath(s.db, s.logger),
    59  		communityDescriptionTokenImagesPath: handleCommunityDescriptionTokenImagesPath(s.db, s.logger),
    60  		walletCommunityImagesPath:           handleWalletCommunityImages(s.walletDB, s.logger),
    61  		walletCollectionImagesPath:          handleWalletCollectionImages(s.walletDB, s.logger),
    62  		walletCollectibleImagesPath:         handleWalletCollectibleImages(s.walletDB, s.logger),
    63  	})
    64  
    65  	return s, nil
    66  }
    67  
    68  func (s *MediaServer) MakeImageServerURL() string {
    69  	u := s.MakeBaseURL()
    70  	u.Path = basePath + "/"
    71  	return u.String()
    72  }
    73  
    74  func (s *MediaServer) MakeImageURL(id string) string {
    75  	u := s.MakeBaseURL()
    76  	u.Path = imagesPath
    77  	u.RawQuery = url.Values{"messageId": {id}}.Encode()
    78  
    79  	return u.String()
    80  }
    81  
    82  func (s *MediaServer) MakeLinkPreviewThumbnailURL(msgID string, previewURL string) string {
    83  	u := s.MakeBaseURL()
    84  	u.Path = LinkPreviewThumbnailPath
    85  	u.RawQuery = url.Values{"message-id": {msgID}, "url": {previewURL}}.Encode()
    86  	return u.String()
    87  }
    88  
    89  func (s *MediaServer) MakeStatusLinkPreviewThumbnailURL(msgID string, previewURL string, imageID common.MediaServerImageID) string {
    90  	u := s.MakeBaseURL()
    91  	u.Path = StatusLinkPreviewThumbnailPath
    92  	u.RawQuery = url.Values{"message-id": {msgID}, "url": {previewURL}, "image-id": {string(imageID)}}.Encode()
    93  	return u.String()
    94  }
    95  
    96  func (s *MediaServer) MakeLinkPreviewFaviconURL(msgID string, previewURL string) string {
    97  	u := s.MakeBaseURL()
    98  	u.Path = LinkPreviewFaviconPath
    99  	u.RawQuery = url.Values{"message-id": {msgID}, "url": {previewURL}}.Encode()
   100  	return u.String()
   101  }
   102  
   103  func (s *MediaServer) MakeDiscordAuthorAvatarURL(authorID string) string {
   104  	u := s.MakeBaseURL()
   105  	u.Path = discordAuthorsPath
   106  	u.RawQuery = url.Values{"authorId": {authorID}}.Encode()
   107  
   108  	return u.String()
   109  }
   110  
   111  func (s *MediaServer) MakeDiscordAttachmentURL(messageID string, id string) string {
   112  	u := s.MakeBaseURL()
   113  	u.Path = discordAttachmentsPath
   114  	u.RawQuery = url.Values{"messageId": {messageID}, "attachmentId": {id}}.Encode()
   115  
   116  	return u.String()
   117  }
   118  
   119  func (s *MediaServer) MakeAudioURL(id string) string {
   120  	u := s.MakeBaseURL()
   121  	u.Path = audioPath
   122  	u.RawQuery = url.Values{"messageId": {id}}.Encode()
   123  
   124  	return u.String()
   125  }
   126  
   127  func (s *MediaServer) MakeStickerURL(stickerHash string) string {
   128  	u := s.MakeBaseURL()
   129  	u.Path = ipfsPath
   130  	u.RawQuery = url.Values{"hash": {stickerHash}}.Encode()
   131  
   132  	return u.String()
   133  }
   134  
   135  func (s *MediaServer) MakeQRURL(qurul string,
   136  	allowProfileImage string,
   137  	level string,
   138  	size string,
   139  	keyUID string,
   140  	imageName string) string {
   141  	u := s.MakeBaseURL()
   142  	u.Path = generateQRCode
   143  	u.RawQuery = url.Values{"url": {qurul},
   144  		"level":             {level},
   145  		"allowProfileImage": {allowProfileImage},
   146  		"size":              {size},
   147  		"keyUid":            {keyUID},
   148  		"imageName":         {imageName}}.Encode()
   149  
   150  	return u.String()
   151  }
   152  
   153  func (s *MediaServer) MakeContactImageURL(publicKey string, imageType string) string {
   154  	u := s.MakeBaseURL()
   155  	u.Path = contactImagesPath
   156  	u.RawQuery = url.Values{"publicKey": {publicKey}, "imageName": {imageType}}.Encode()
   157  
   158  	return u.String()
   159  }
   160  
   161  func (s *MediaServer) MakeCommunityTokenImagesURL(communityID string, chainID uint64, symbol string) string {
   162  	u := s.MakeBaseURL()
   163  	u.Path = communityTokenImagesPath
   164  	u.RawQuery = url.Values{
   165  		"communityID": {communityID},
   166  		"chainID":     {strconv.FormatUint(chainID, 10)},
   167  		"symbol":      {symbol},
   168  	}.Encode()
   169  
   170  	return u.String()
   171  }
   172  
   173  func (s *MediaServer) MakeCommunityImageURL(communityID, name string) string {
   174  	u := s.MakeBaseURL()
   175  	u.Path = communityDescriptionImagesPath
   176  	u.RawQuery = url.Values{
   177  		"communityID": {communityID},
   178  		"name":        {name},
   179  	}.Encode()
   180  
   181  	return u.String()
   182  }
   183  
   184  func (s *MediaServer) MakeCommunityDescriptionTokenImageURL(communityID, symbol string) string {
   185  	u := s.MakeBaseURL()
   186  	u.Path = communityDescriptionTokenImagesPath
   187  	u.RawQuery = url.Values{
   188  		"communityID": {communityID},
   189  		"symbol":      {symbol},
   190  	}.Encode()
   191  
   192  	return u.String()
   193  }
   194  
   195  func (s *MediaServer) MakeWalletCommunityImagesURL(communityID string) string {
   196  	u := s.MakeBaseURL()
   197  	u.Path = walletCommunityImagesPath
   198  	u.RawQuery = url.Values{
   199  		"communityID": {communityID},
   200  	}.Encode()
   201  
   202  	return u.String()
   203  }
   204  
   205  func (s *MediaServer) MakeWalletCollectionImagesURL(contractID thirdparty.ContractID) string {
   206  	u := s.MakeBaseURL()
   207  	u.Path = walletCollectionImagesPath
   208  	u.RawQuery = url.Values{
   209  		"chainID":         {contractID.ChainID.String()},
   210  		"contractAddress": {contractID.Address.Hex()},
   211  	}.Encode()
   212  
   213  	return u.String()
   214  }
   215  
   216  func (s *MediaServer) MakeWalletCollectibleImagesURL(collectibleID thirdparty.CollectibleUniqueID) string {
   217  	u := s.MakeBaseURL()
   218  	u.Path = walletCollectibleImagesPath
   219  	u.RawQuery = url.Values{
   220  		"chainID":         {collectibleID.ContractID.ChainID.String()},
   221  		"contractAddress": {collectibleID.ContractID.Address.Hex()},
   222  		"tokenID":         {collectibleID.TokenID.String()},
   223  	}.Encode()
   224  
   225  	return u.String()
   226  }