storj.io/minio@v0.0.0-20230509071714-0cbc90f649b1/browser/app/js/utils.js (about)

     1  /*
     2   * MinIO Cloud Storage (C) 2016 MinIO, Inc.
     3   *
     4   * Licensed under the Apache License, Version 2.0 (the "License");
     5   * you may not use this file except in compliance with the License.
     6   * You may obtain a copy of the License at
     7   *
     8   *     http://www.apache.org/licenses/LICENSE-2.0
     9   *
    10   * Unless required by applicable law or agreed to in writing, software
    11   * distributed under the License is distributed on an "AS IS" BASIS,
    12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    13   * See the License for the specific language governing permissions and
    14   * limitations under the License.
    15   */
    16  
    17  import { minioBrowserPrefix, SORT_ORDER_DESC } from "./constants.js"
    18  
    19  export const sortObjectsByName = (objects, order) => {
    20    let folders = objects.filter(object => object.name.endsWith("/"))
    21    let files = objects.filter(object => !object.name.endsWith("/"))
    22    folders = folders.sort((a, b) => {
    23      if (a.name.toLowerCase() < b.name.toLowerCase()) return -1
    24      if (a.name.toLowerCase() > b.name.toLowerCase()) return 1
    25      return 0
    26    })
    27    files = files.sort((a, b) => {
    28      if (a.name.toLowerCase() < b.name.toLowerCase()) return -1
    29      if (a.name.toLowerCase() > b.name.toLowerCase()) return 1
    30      return 0
    31    })
    32    if (order === SORT_ORDER_DESC) {
    33      folders = folders.reverse()
    34      files = files.reverse()
    35    }
    36    return [...folders, ...files]
    37  }
    38  
    39  export const sortObjectsBySize = (objects, order) => {
    40    let folders = objects.filter(object => object.name.endsWith("/"))
    41    let files = objects.filter(object => !object.name.endsWith("/"))
    42    files = files.sort((a, b) => a.size - b.size)
    43    if (order === SORT_ORDER_DESC) files = files.reverse()
    44    return [...folders, ...files]
    45  }
    46  
    47  export const sortObjectsByDate = (objects, order) => {
    48    let folders = objects.filter(object => object.name.endsWith("/"))
    49    let files = objects.filter(object => !object.name.endsWith("/"))
    50    files = files.sort(
    51      (a, b) =>
    52        new Date(a.lastModified).getTime() - new Date(b.lastModified).getTime()
    53    )
    54    if (order === SORT_ORDER_DESC) files = files.reverse()
    55    return [...folders, ...files]
    56  }
    57  
    58  export const pathSlice = path => {
    59    path = path.replace(minioBrowserPrefix, "")
    60    let prefix = ""
    61    let bucket = ""
    62    if (!path)
    63      return {
    64        bucket,
    65        prefix
    66      }
    67    let objectIndex = path.indexOf("/", 1)
    68    if (objectIndex == -1) {
    69      bucket = path.slice(1)
    70      return {
    71        bucket,
    72        prefix
    73      }
    74    }
    75    bucket = path.slice(1, objectIndex)
    76    prefix = path.slice(objectIndex + 1)
    77    return {
    78      bucket,
    79      prefix
    80    }
    81  }
    82  
    83  export const pathJoin = (bucket, prefix) => {
    84    if (!prefix) prefix = ""
    85    return minioBrowserPrefix + "/" + bucket + "/" + prefix
    86  }
    87  
    88  export const getRandomAccessKey = () => {
    89    const alphaNumericTable = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    90    let arr = new Uint8Array(20)
    91    window.crypto.getRandomValues(arr)
    92    const random = Array.prototype.map.call(arr, v => {
    93      const i = v % alphaNumericTable.length
    94      return alphaNumericTable.charAt(i)
    95    })
    96    return random.join("")
    97  }
    98  
    99  export const getRandomSecretKey = () => {
   100    let arr = new Uint8Array(40)
   101    window.crypto.getRandomValues(arr)
   102    const binStr = Array.prototype.map
   103      .call(arr, v => {
   104        return String.fromCharCode(v)
   105      })
   106      .join("")
   107    const base64Str = btoa(binStr)
   108    return base64Str.replace(/\//g, "+").substr(0, 40)
   109  }
   110  
   111  export const getRandomString = length => {
   112    var text = ""
   113    var possible =
   114      "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
   115    for (var i = 0; i < length; i++) {
   116      text += possible.charAt(Math.floor(Math.random() * possible.length))
   117    }
   118    return text
   119  }