Skip to content

Commit

Permalink
Uploads
Browse files Browse the repository at this point in the history
  • Loading branch information
easafe committed Jul 2, 2024
1 parent 4f6ab03 commit ae4767b
Show file tree
Hide file tree
Showing 11 changed files with 41 additions and 92 deletions.
1 change: 0 additions & 1 deletion spago.dhall
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,6 @@ You can edit this file as you like.
, "maybe"
, "newtype"
, "node-buffer"
, "node-fs"
, "node-fs-aff"
, "node-http"
, "node-process"
Expand Down
2 changes: 1 addition & 1 deletion src/Client/Im/Chat.purs
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ import Shared.Element (ElementId(..))
import Shared.Im.Contact as SIC
import Shared.Markdown (Token(..))
import Shared.Markdown as SM
import Shared.Options.File (maxImageSize)
import Shared.Resource (maxImageSize)
import Shared.Unsafe ((!@))
import Shared.Unsafe as SU
import Type.Proxy (Proxy(..))
Expand Down
2 changes: 1 addition & 1 deletion src/Server/3000/Data.purs
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ grammaticalClasses =
, Tuple 7 [ "Termite", "Buffalo", "Thought", "Produce", "Popcorn", "Dogfish", "Manatee", "Dolphin", "Chicken", "Process", "Vicuña", "Request", "Panther", "Opinion", "Feeling", "Lookout", "Control", "Payment", "Insurer", "Opossum", "Partner", "Contact", "Library", "Raccoon", "Pelican", "Sweater", "Cabbage", "Aviator", "Lapwing", "Oatmeal", "Narwhal", "Reading", "Mailbox", "Ostrich", "Officer", "Hydrant", "Disease", "Example", "History", "Hamster", "Airport", "Student", "Quarter", "Visitor", "Disgust", "Purpose", "Stretch", "Guanaco", "Haircut", "Creator", "Driving", "Gorilla", "Whistle", "Attempt", "Goshawk", "Lettuce", "Manager", "Curtain", "Caribou", "Cleaner", "Picture", "Railway", "Gazelle", "Harmony", "Octopus", "Fiction", "Tarsier", "Holiday", "Account", "Achieve", "Echidna", "Volcano", "Mammoth", "Current", "Sardine", "Thunder", "Pancake", "Brother", "Country", "Respect", "Impulse", "Morning", "Peafowl", "Giraffe", "Leopard", "Caption", "Trouble", "Balance", "Lobster", "Wallaby", "Apparel", "Stomach", "Balloon", "Comfort", "Cushion", "Company", "Penguin", "Hearing", "Meeting", "Bedroom", "Flagger", "Fighter", "Feather", "Artisan", "Station", "Science", "Hobbies", "Measure", "Channel", "Receipt", "Protest", "Writing", "Support", "Soldier", "Cheetah", "Texture", "Herring", "Journey", "Cowhand", "Laborer", "Machine", "Society", "Mallard", "Believe", "Scholar", "Weather", "Leather", "Plastic", "Insider", "Ladybug", "Quetzal", "Empress", "Emperor", "Captain", "Cashier", "Catcher", "Caterer", "Cellist", "Chemist", "Cobbler", "Courier", "Samurai", "Senator", "Surgeon", "Swimmer", "Veteran", "Athlete" ]
]
, Tuple Adjective $ HM.fromArray
[ Tuple 8 [ "Grateful", "Strident", "Vigilant", "Thorough", "Splendid", "Grounded", "Attached", "Academic", "Adorable", "Metallic", "Granular", "Trusting", "Exciting", "Possible", "Ordinary", "Nautical", "Gruesome", "Thankful", "Creative", "Absolute", "Shocking", "Well-lit", "Colossal", "Jubilant", "Innocent", "Gracious", "Idolized", "Charming", "Confused", "Alarming", "Artistic", "Composed", "Anchored", "Unsteady", "Lustrous", "Majestic", "Decisive", "Precious", "Suburban", "Informal", "Distinct", "Familiar", "Advanced", "Scratchy", "Haunting", "Cheerful", "Critical", "Gleaming", "Agitated", "Careless", "Squiggly", "Impolite", "Cultured", "Fabulous", "Indolent", "Finished", "Writhing", "Striking", "Fearless", "Trifling", "Harmless", "Punctual", "Terrible", "Clueless", "Euphoric", "Favorite", "Fatherly", "Educated", "Positive", "Obedient", "Ironclad", "Friendly", "Gigantic", "Vigorous", "Vengeful", "Reckless", "Carefree", "Truthful", "Terrific", "Negative", "Horrible", "Quixotic", "Tempting", "Infamous", "Well-off", "Discrete", "Bustling", "Tattered", "Definite", "Wretched", "Straight", "Motherly", "Blushing", "Circular", "Detailed", "Pleasant", "Pristine", "Gripping", "Studious", "Intrepid", "Lopsided", "Physical", "Whopping", "Reliable", "Precious", "Internal", "Infinite", "Growling", "Pleasing", "Uncommon", "Spotless", "Constant", "Variable", "Standard", "Ecstatic", "Sardonic", "Flawless", "Fruitful", "Deserted", "Untimely", "Sociable", "Puzzling", "Snarling", "Dazzling", "Forsaken", "Helpless", "Generous", "Unwieldy", "Concrete", "Valuable", "Animated", "Original", "Utilized", "Blissful", "Mindless", "Grizzled", "Outlying", "Polished", "Cautious", "Required", "Handmade", "Aromatic", "Watchful", "Gullible", "Unfolded", "Glorious", "Rotating", "Specific", "Esteemed", "Stunning", "Relieved", "Wrathful", "Peaceful", "Faithful", "Menacing", "Spiteful", "Accurate", "Crushing", "Troubled", "Complete", "Perfumed", "Personal", "Graceful", "Powerful", "Colorful", "Criminal", "Separate", "Periodic", "Heavenly", "Disloyal", "Slippery", "Skeletal", "Electric", "Probable", "Parallel", "Luminous", "Spirited", "Previous", "Frequent", "Sizzling", "Outgoing", "Superior", "Dramatic", "Scornful", "Flippant", "Adorable", "Unlawful", "Tangible", "Diligent", "Fragrant", "Youthful", "Juvenile", "Forceful", "Ultimate", "Fumbling", "Athletic", "Official", "Gorgeous", "Insecure", "Virtuous" ]
[ Tuple 8 [ "Grateful", "Strident", "Vigilant", "Thorough", "Splendid", "Grounded", "Attached", "Academic", "Adorable", "Metallic", "Granular", "Trusting", "Exciting", "Possible", "Ordinary", "Nautical", "Gruesome", "Thankful", "Creative", "Absolute", "Shocking", "Well-lit", "Colossal", "Jubilant", "Innocent", "Gracious", "Idolized", "Charming", "Confused", "Alarming", "Artistic", "Composed", "Anchored", "Unsteady", "Lustrous", "Majestic", "Decisive", "Precious", "Suburban", "Informal", "Distinct", "Familiar", "Advanced", "Scratchy", "Haunting", "Cheerful", "Critical", "Gleaming", "Agitated", "Careless", "Squiggly", "Impolite", "Cultured", "Fabulous", "Indolent", "Finished", "Writhing", "Striking", "Fearless", "Trifling", "Harmless", "Punctual", "Terrible", "Clueless", "Euphoric", "Favorite", "Fatherly", "Educated", "Positive", "Obedient", "Ironclad", "Friendly", "Gigantic", "Vigorous", "Vengeful", "Reckless", "Carefree", "Truthful", "Terrific", "Negative", "Horrible", "Quixotic", "Tempting", "Infamous", "Well-off", "Discrete", "Bustling", "Tattered", "Definite", "Wretched", "Straight", "Motherly", "Blushing", "Circular", "Detailed", "Pleasant", "Pristine", "Gripping", "Studious", "Intrepid", "Lopsided", "Physical", "Whopping", "Reliable", "Precious", "Internal", "Infinite", "Growling", "Pleasing", "Uncommon", "Spotless", "Constant", "Variable", "Standard", "Ecstatic", "Sardonic", "Flawless", "Fruitful", "Deserted", "Untimely", "Sociable", "Puzzling", "Snarling", "Dazzling", "Forsaken", "Helpless", "Generous", "Unwieldy", "Concrete", "Valuable", "Animated", "Original", "Utilized", "Blissful", "Mindless", "Grizzled", "Outlying", "Polished", "Cautious", "Required", "Handmade", "Aromatic", "Watchful", "Gullible", "Unfolded", "Glorious", "Rotating", "Specific", "Esteemed", "Stunning", "Relieved", "Wrathful", "Peaceful", "Faithful", "Menacing", "Spiteful", "Accurate", "Crushing", "Troubled", "Complete", "Perfumed", "Personal", "Graceful", "Powerful", "Colorful", "Criminal", "Separate", "Periodic", "Heavenly", "Disloyal", "Slippery", "Skeletal", "Electric", "Probable", "Parallel", "Luminous", "Spirited", "Previous", "Frequent", "Sizzling", "Outgoing", "Superior", "Dramatic", "Scornful", "Flippant", "Adorable", "Unlawful", "Tangible", "Diligent", "Fragrant", "Youthful", "Juvenile", "Forceful", "Ultimate", "Fumbling", "Athletic", "Official", "Gorgeous", "Insecure", "Virtuous" ]
, Tuple 9 [ "Scholarly", "Delicious", "Indelible", "Misguided", "Excellent", "Unwilling", "Far-flung", "Glamorous", "Wonderful", "Insidious", "Unhealthy", "Impartial", "Wide-eyed", "Pointless", "Concerned", "Venerated", "Identical", "Necessary", "Brilliant", "Unnatural", "Yellowish", "Practical", "Satisfied", "Mortified", "Unsightly", "Insistent", "Qualified", "Evergreen", "Long-term", "Lumbering", "Memorable", "Imperfect", "Worrisome", "Distorted", "Political", "Well-made", "Agreeable", "Difficult", "Unequaled", "Competent", "Agonizing", "Important", "Realistic", "Monstrous", "Traumatic", "Sparkling", "Disguised", "Rewarding", "Neglected", "Flustered", "Luxurious", "Miserable", "Whispered", "Unwelcome", "Overjoyed", "Fortunate", "Marvelous", "Talkative", "Foolhardy", "Repentant", "Downright", "Surprised", "Querulous", "Firsthand", "Breakable", "Bewitched", "Imaginary", "Fantastic", "Essential", "Excitable", "Shameless", "Turbulent", "Acrobatic", "Exhausted", "Deafening", "Dishonest", "Unwritten", "Favorable", "Vivacious", "Dependent", "Ambitious", "Energetic", "Admirable", "Cavernous", "Heartfelt", "Offensive", "Unwitting", "Delirious", "Defensive", "Emotional", "Expensive", "Quizzical", "Miniature", "Clear-cut", "Enchanted", "Nocturnal", "Abandoned", "Ill-fated", "Demanding", "Spherical", "Deficient", "Acclaimed", "Palatable", "Judicious", "Beautiful", "Powerless", "Elaborate", "Sarcastic", "Grandiose", "Well-worn", "Downright", "Infantile", "Conscious", "Sorrowful", "Different", "Authentic", "Whirlwind", "Honorable", "Cluttered", "Pertinent", "Quarterly", "Grotesque", "Revolving", "Immediate", "Frivolous", "Repulsive", "Automatic", "Treasured", "Alienated", "Courteous", "Unselfish", "Hilarious", "Anguished", "Plaintive", "Whimsical", "Exemplary", "Worthless", "Secondary", "Colorless", "Bountiful", "Attentive", "Dangerous" ]
, Tuple 5 [ "Minor", "Musty", "Happy", "Round", "Rowdy", "Muddy", "Ideal", "Blank", "White", "Fancy", "Smart", "Noisy", "Wrong", "Unfit", "Quick", "Major", "Joint", "Blind", "Rural", "Regal", "Dense", "Corny", "Early", "Frail", "Brisk", "Every", "Nifty", "Fixed", "Clear", "Weird", "Sandy", "Heavy", "Lumpy", "Flaky", "Sharp", "Scaly", "Scary", "Harsh", "Noted", "Salty", "Light", "Plush", "Meaty", "Sweet", "Black", "Chief", "Grave", "Wordy", "Jumpy", "Super", "Muted", "Sunny", "Curly", "Ample", "Soupy", "Adept", "Fussy", "Tense", "Young", "Equal", "Blond", "Stale", "Close", "These", "Loyal", "Naive", "Pushy", "Soggy", "Agile", "Husky", "Proud", "Jolly", "Front", "Novel", "Pesky", "Mushy", "Third", "Tepid", "Legal", "Bumpy", "Vague", "Fuzzy", "Tubby", "Funny", "Short", "Milky", "Other", "Bogus", "Prime", "Stark", "Upset", "Quiet", "Grown", "Witty", "Mealy", "Valid", "Brief", "Brown", "Steep", "Those", "Which", "Misty", "Brave", "Bulky", "Total", "Whole", "Merry", "Hefty", "Rusty", "Kooky", "Baggy", "Known", "Fluid", "Vivid", "Tired", "Clean", "Hasty", "Small", "Fresh", "Lucky", "Green", "Plain", "Urban", "Staid", "Prize", "Runny", "Vapid", "Royal", "Murky", "Silly", "Bland", "Leafy", "Alive", "Frank", "Right", "Rough", "Weary", "Tough", "Cruel", "Messy", "Spicy", "Livid", "Great", "Eager", "Bowed", "Lanky", "Weepy", "Loose", "Grimy", "Shiny", "Itchy", "False", "Ready", "Hairy", "Ruddy", "Angry", "Jaded", "Jumbo", "Empty", "Crisp", "Fatal", "Bossy", "Moral", "First", "Giddy", "Woozy", "Rapid", "Moist", "Faint", "Dizzy", "Steel", "Glass", "Aware", "Minty", "Dopey", "Gross", "Yummy", "Zesty", "Grand", "Lined", "Gummy", "Tight", "Vital", "Solid", "Silky", "Basic", "Bleak", "Burly", "Swift", "Tasty", "Handy", "Alert", "Testy", "Windy", "Dirty", "Utter", "Giant", "Showy", "Mixed", "Shady" ]
, Tuple 6 [ "Closed", "Somber", "Hoarse", "Flimsy", "Annual", "Giving", "Medium", "Humble", "Feisty", "Poised", "Zigzag", "Intent", "Ringed", "Amused", "Common", "Feline", "Coarse", "Expert", "Clumsy", "Square", "Bitter", "Lively", "Creepy", "Warped", "Pretty", "Subtle", "Sweaty", "Nimble", "Fickle", "Strict", "Shoddy", "Pastel", "Unripe", "Dreary", "Untidy", "Stormy", "Barren", "Famous", "Stable", "Homely", "Severe", "Frosty", "Putrid", "Untrue", "Hearty", "Sneaky", "Shabby", "Frugal", "Oblong", "Greedy", "Edible", "Direct", "Hidden", "Acidic", "Silver", "Sugary", "Sudden", "Usable", "Mellow", "Cloudy", "Wilted", "Silent", "Female", "Lonely", "Actual", "Tragic", "Bronze", "Unruly", "Entire", "Fluffy", "Loving", "Grumpy", "Liquid", "Oblong", "Modest", "Paltry", "Droopy", "Slushy", "Creamy", "Secret", "Decent", "Wobbly", "Quirky", "Measly", "Thorny", "Hollow", "Lavish", "Klutzy", "Queasy", "Inborn", "Stingy", "Guilty", "Bouncy", "Upbeat", "Strong", "Unsung", "Knobby", "Normal", "Linear", "Gentle", "Hungry", "Sleepy", "Yellow", "Smooth", "Gloomy", "Boring", "Frayed", "Pricey", "Polite", "French", "Formal", "Robust", "Watery", "Uneven", "Joyful", "Second", "Little", "Trusty", "Useful", "Flawed", "Frizzy", "Wiggly", "Ragged", "Joyous", "Kindly", "Jaunty", "Dental", "Superb", "Yearly", "Costly", "Winged", "Drafty", "Tender", "Gifted", "Cheery", "Forked", "Dapper", "Dreary", "Timely", "Wooden", "Frozen", "Mature", "Crafty", "Single", "Stupid", "Golden", "Lawful", "Flashy", "Glossy", "Aching", "Doting", "Frilly", "Snappy", "Wicked", "Sinful", "Kosher", "Speedy", "Dismal", "Elated", "Exotic", "Modern", "Portly", "Starry", "Unique", "United", "Bright", "Impish", "Jagged", "Honest", "Remote", "Quaint", "Knotty", "Narrow", "Smoggy", "Sparse", "Impure", "Tricky", "Chilly", "Active", "Skinny", "Proper", "Afraid", "Rotten", "Worthy", "Cooked", "Scarce", "Violet", "Scared", "Filthy", "Purple", "Arctic", "Likely", "Clever", "Shrill", "Canine", "Weekly", "Orange", "Better", "Lovely", "Webbed", "Spiffy", "Woeful", "Double", "Candid", "Dismal", "Adored", "Unused", "Jovial", "Ornery", "Cuddly", "Svelte", "Caring", "Frigid", "Broken", "Junior", "Sturdy", "Ornate", "Serene", "Tinted", "Deadly", "Bubbly", "Recent", "Grubby", "Slight", "Meager", "Snoopy", "Vacant", "Simple", "Daring" ]
Expand Down
3 changes: 0 additions & 3 deletions src/Server/File.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,5 @@
import imageType from 'image-type';

export async function upload_(fileName, buffer) {
}

export function realFileExtension_(buffer) {
return async function() {
let r = await imageType(buffer);
Expand Down
38 changes: 11 additions & 27 deletions src/Server/File.purs
Original file line number Diff line number Diff line change
Expand Up @@ -2,42 +2,32 @@ module Server.File where

import Prelude

import Data.Foldable as FD
import Control.Promise (Promise)
import Control.Promise as CP
import Data.Either (Either(..))
import Data.HashMap as DH
import Data.Maybe (Maybe(..))
import Data.Set (member) as DS
import Data.String (Pattern(..))
import Data.String as DS
import Data.String (split) as DS
import Data.UUID as DU
import Effect (Effect)
import Effect.Class (liftEffect)
import Effect.Uncurried (EffectFn1, EffectFn2)
import Effect.Uncurried as EU
import Environment (production)
import Effect.Aff (Aff)
import Node.Buffer (Buffer)
import Node.Buffer as NB
import Effect.Aff (Aff)
import Node.FS.Sync as NFS
import Node.Encoding (Encoding(..))
import Node.FS.Aff as NFA
import Data.Maybe (Maybe(..))
import Run as R
import Data.Set as DS
import Server.Response as SR
import Server.Effect (BaseEffect, Configuration)
import Shared.Options.File
import Shared.Unsafe as SU
import Control.Promise (Promise)
import Control.Promise as CP

foreign import upload_ EffectFn2 String Buffer Unit
import Server.Response as SR
import Shared.Resource (Media(..), ResourceType(..), allowedExtensions, allowedMediaTypes, maxImageSize, maxImageSizeKB)
import Shared.Resource as SP

foreign import realFileExtension_ Buffer Effect (Promise String)

realFileExtension Buffer Aff String
realFileExtension buffer = CP.toAffE $ realFileExtension_ buffer

upload String Buffer Effect Unit
upload = EU.runEffectFn2 upload_

invalidImageMessage String
invalidImageMessage = "Invalid image"

Expand All @@ -60,13 +50,7 @@ saveBase64File input =
if DS.member extension allowedExtensions then do
uuid ← R.liftEffect (DU.toString <$> DU.genUUID)
let fileName = uuid <> extension
if production then
liftEffect $ upload fileName buffer
else do
let localPath = "src/Client/media/upload/"
exists ← R.liftEffect $ NFS.exists localPath
unless exists <<< R.liftAff $ NFA.mkdir localPath
R.liftAff $ NFA.writeFile (localPath <> fileName) buffer
R.liftAff $ NFA.writeFile (SP.resourcePath (Left $ Upload fileName) Ignore) buffer
pure fileName
else
invalidImage
Expand Down
6 changes: 2 additions & 4 deletions src/Server/Handler.purs
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,6 @@ import Server.Effect

import Data.Either (Either(..))
import Data.List (List(..))
import Data.List as DL
import Data.String as DS
import Debug (spy)
import Effect.Aff (Aff)
import Effect.Aff as EA
Expand Down Expand Up @@ -41,7 +39,7 @@ import Server.Profile.Handler as SPH
import Server.Recover.Handler as SRH
import Server.Settings.Handler as SSH
import Server.Unsubscribe.Handler as SUH
import Shared.Resource (developmentBasePath)
import Shared.Resource (localBasePath)
import Shared.ResponseError (ResponseError(..))
import Shared.Routes (routes)

Expand Down Expand Up @@ -144,5 +142,5 @@ developmentFiles ∷ { params ∷ { path ∷ List String } } → Aff File
developmentFiles { params: { path } } = PSH.file fullPath {}
where
fullPath = case path of
Cons folder (Cons file Nil) → developmentBasePath <> folder <> "/" <> file
Cons folder (Cons file Nil) → localBasePath <> folder <> "/" <> file
_ → "notfound"
4 changes: 2 additions & 2 deletions src/Shared/Im/View/ChatInput.purs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
module Shared.Im.View.ChatInput where

import Prelude
import Shared.Availability
import Shared.Im.Types
import Shared.User

Expand All @@ -14,7 +15,6 @@ import Data.Maybe as DM
import Data.Symbol as TDS
import Data.Tuple (Tuple(..))
import Data.Tuple as DT
import Shared.Availability
import Debug (spy)
import Flame (Html)
import Flame.Html.Attribute as HA
Expand All @@ -24,9 +24,9 @@ import Shared.Experiments.Impersonation (impersonations)
import Shared.Im.Emoji as SIE
import Shared.Im.Svg as SIS
import Shared.Keydown as SK
import Shared.Options.File (maxImageSizeKB)
import Shared.Privilege (Privilege(..))
import Shared.Privilege as SP
import Shared.Resource (maxImageSizeKB)
import Shared.Setter as SS
import Type.Proxy (Proxy(..))

Expand Down
37 changes: 0 additions & 37 deletions src/Shared/Options/File.purs

This file was deleted.

Loading

0 comments on commit ae4767b

Please sign in to comment.