Skip to content

Aarif123456/image_repository

Repository files navigation

Image Repository

BCH compliance DeepScan grade MIT license Vulnerability count Code grade W3C Validation Website status lines of code Top Language

What is this? 🤔

This is an image repository created for the Shopify Developer Intern Challenge

Quick Start 🚀

I recommend looking first checking out the live demo
To run locally, clone this repository and run npm start. Then open up http://localhost:3000 to view it in the browser.

Features 👀

  • Add images
    • Upload images one at a time or in bulk
    • Image uploaded securely -secure in transport and rest
    • Select who has access to images
  • View images
    • view what images they have uploaded
  • Delete images
    • Bulk delete
    • Can only delete image uploaded by user
    • secure deletion
  • File management
    • Users can choose what files they want to share with the world. This will become relevant when we add in the search functionalities

Building 🚧

System Architecture 🏰

System Context Diagram

Technology stack ⚙️

  • React: React is declarative, component-based language that makes it easier to quickly single-page applications.
  • Typescript: TypeScript is a JavaScript extension, which is used to encourage developers to write more maintainable code. It compiles to JavaScript so it can be run on any modern browser.
  • ESLint: ESLint is a static analyzer for JavaScript. In our code we also use it to ensure our translation json files are also in the correct format.
  • Jest: Jest is a simple, yet comprehensive testing framework which works well with React.
  • React-Intl: React-intl is a JavaScript library that makes simplifies the process of internalization for web-applications.
  • Formik: Formik is a light weight library that handles form creation and management in React.
  • Axios: Axios is a promise based HTTP client which simplifies the connecting to the API for this website.
  • Dropzone: Dropzone is HTML5-compliant and drag and drop component for file uploading. It allows us to select multiple files at once and handles basic file validation.
  • Material-UI: Material-UI is a React library that implements Google's Material Design. It lets quickly create beautiful components so we can focus more on the functionality.

DONE 🌟

  • View

    • Download chosen file - make sure it is the same as when you uploaded
  • Delete

    • Delete selected file - make sure user can only delete file in their folder
  • User Management

    • Allow users to register
    • Allow users to login
  • Upload

    • Upload file to user's account
    • Make sure file is encrypted
    • Make sure users don't overwrite their file

Related Repository 🕵️

  • CP-ABE encryption used to encrypt files so even if a hacker got their hands on the file it would still be encrypted
  • PHP Back-end

TODO ⏰

  • View

    • View image in tile form
    • View files in folder
  • Delete

    • Test mass deletion (after)
    • Delete folder (after)
  • File encryption

    • Change permission of file
    • Change permission of all files in folder (after)
  • User Management (after)

    • Allow user to logout
    • Let user request password reset
  • Searching (after)

    • Allow users to search public files by name
    • Allow users to search public files by tags
    • Allow users to search files in their organization

References 📚

Space background