(message *Message, origin string, lang string)
| 264 | } |
| 265 | |
| 266 | func RefineMessageFiles(message *Message, origin string, lang string) error { |
| 267 | text := message.Text |
| 268 | // re := regexp.MustCompile(`data:image\/([a-zA-Z]*);base64,([^"]*)`) |
| 269 | re := regexp.MustCompile(`data:([a-zA-Z0-9][a-zA-Z0-9!#$&^_.+\-]*\/[a-zA-Z0-9][a-zA-Z0-9!#$&^_.+\-]*);base64,[a-zA-Z0-9+/=_-]+`) |
| 270 | matches := re.FindAllString(text, -1) |
| 271 | if len(matches) > 0 { |
| 272 | if message.FileName == "" { |
| 273 | mimeType := dataURLMimeType(matches[0]) |
| 274 | if mimeType != "" { |
| 275 | ext, err := getExtFromMimeType(mimeType, lang) |
| 276 | if err == nil { |
| 277 | message.FileName = fmt.Sprintf("%s.%s", message.Name, ext) |
| 278 | } |
| 279 | } |
| 280 | } |
| 281 | |
| 282 | var store *Store |
| 283 | var err error |
| 284 | store, err = ResolveStoreByOwnerAndName(message.Owner, message.Store) |
| 285 | if err != nil { |
| 286 | return err |
| 287 | } |
| 288 | if store == nil { |
| 289 | store, err = GetDefaultStore(message.Owner) |
| 290 | if err != nil { |
| 291 | return err |
| 292 | } |
| 293 | } |
| 294 | if store == nil && message.Owner != "admin" { |
| 295 | store, err = GetDefaultStore("admin") |
| 296 | if err != nil { |
| 297 | return err |
| 298 | } |
| 299 | } |
| 300 | if store == nil { |
| 301 | return fmt.Errorf(i18n.Translate(lang, "account:The default store is not found")) |
| 302 | } |
| 303 | |
| 304 | obj, err := store.GetImageProviderObj(lang) |
| 305 | if err != nil { |
| 306 | return err |
| 307 | } |
| 308 | |
| 309 | for _, match := range matches { |
| 310 | var content []byte |
| 311 | content, err = parseBase64Image(match, lang) |
| 312 | if err != nil { |
| 313 | return err |
| 314 | } |
| 315 | |
| 316 | filePath := fmt.Sprintf("%s/%s/%s/%s", message.Organization, message.User, message.Chat, message.FileName) |
| 317 | |
| 318 | var fileUrl string |
| 319 | fileUrl, err = obj.PutObject(message.User, message.Chat, filePath, bytes.NewBuffer(content)) |
| 320 | if err != nil { |
| 321 | return err |
| 322 | } |
| 323 |
no test coverage detected