41 lines
913 B
CoffeeScript
41 lines
913 B
CoffeeScript
# Maimum upload size (in bytes)
|
|
MAX_UPLOAD_SIZE = 10 * 1024 * 1024 # 10 MB
|
|
|
|
# Validate content-length header
|
|
validateLength = (req) ->
|
|
(Number.parseInt req.headers.get "content-length") <= MAX_UPLOAD_SIZE
|
|
|
|
# Only accept paths like `/paste/:file_name`
|
|
# No further slahses are supported
|
|
getFileName = (url) ->
|
|
url = new URL url
|
|
if url.pathname[0] isnt '/'
|
|
return null
|
|
parts = url.pathname.split '/'
|
|
if parts.length isnt 3
|
|
return null
|
|
if parts[1] isnt 'paste'
|
|
return null
|
|
return parts[2]
|
|
|
|
# Generate random file ID
|
|
DICTIONARY = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
|
|
ID_LENGTH = 6
|
|
|
|
randomID = ->
|
|
[0..ID_LENGTH].map =>
|
|
DICTIONARY[Math.floor Math.random() * DICTIONARY.length]
|
|
.join ''
|
|
|
|
# Convert a random ID into file path
|
|
idToPath = (id) ->
|
|
id.split ''
|
|
.join '/'
|
|
|
|
export {
|
|
getFileName,
|
|
validateLength,
|
|
MAX_UPLOAD_SIZE,
|
|
randomID,
|
|
idToPath
|
|
} |