Git Product home page Git Product logo

wildboar-imap-server's Introduction

Wildboar IMAP Server

Build by running tsc in the root directory.

Usage

Testing

Run npm run-script test.

Debugging

You can debug easily in VS Code. For some reason, breakpoints do not appear to work in index.ts.

Development

Pre-Alpha

Once the following requirements are met, Wildboar IMAP Server moves into Alpha development.

  • Commands
  • Graceful Shutdown
  • Add isSet to ConfigurationSource.
  • Ignore blank newlines.
  • Healthcheck tool
  • Use a sensitiveCommandRunning flag to prevent race conditions when a connection attempts two APPENDs at once, for instance.
  • Simple Authorization
  • Start-up checks:
    • Confirm that all integers are safe.
    • Confirm that all command names are atoms.
    • Confirm that there are no duplicate plugins.
  • Add capability field to plugins.
  • Consider using nameless queues to make the queue list more readable.
  • Make ConfigurationSource a class so you can keep the master variables list there.
  • Add commands_needing_authorization configuration directive.
  • Is LexemeType.ERROR really necessary anymore? Nope. Deleted.
  • Implement an interface for command callbacks to write to the socket in a more controlled manner.
  • Catch errors in non-arguments lexing.
  • Add warnings or notifications to storage driver responses and all handlers.
  • Deduplicate simple handlers
  • Move schema into command files
  • Immediately drop connection if tag is "GET" to mitigate SSRF attacks.

Alpha

Once the following requirements are met, Wildboar IMAP Server moves into Beta development.

  • AWS SQS message broker support
  • Azure Queue storage support
  • Update dependencies
  • Use Set instead of arrays where uniqueness is a requirement. (Check for string[])
  • Check for correct state at the start of commands.
  • Check toString() occurrences for UTF decoding safety.
    • Flag safe ones with #UTF_SAFE comments.
  • Support SEARCH tricks
  • Address Potential Concurrency Issues: (See ./documentation/concurrency.md.)
    • If responses are written line-by-line, could lines of responses be interlaced?
    • Even if responses are written all at the same time, is it possible for socket writes to overlap?
    • Is a DoS Possible by calling LOGOUT shortly after running a command?
  • Error reporting with the NodeJS Report API
  • Assertions
  • Handle size limitations imposed by message brokers (4GB for AMQP, 16MB for AWS SQS)
  • Fill out JSON schema more (Documentation)
  • Audit all commands for the following:
    • Correct State
    • Error Reporting
    • Argument Length checking
    • Length assertions
    • Error logging
    • Logging is correct severity

Beta

Once the following requirements are met, Wildboar IMAP Server moves into Release Candidate development. In Beta, no new features are added to Wildboar IMAP Server; only testing is performed and bugs are fixed.

  • Static analysis
  • Fuzz testing
  • Achieve 100% test coverage
  • Resilience testing with Chaos Monkey
  • Invalid UTF fuzzing
  • Performance profiling
  • Denial of Service testing
  • Memory leak tests
    • Repeatedly connecting and disconnecting
    • Running commands repeatedly
    • Repeatedly authenticating
  • Test for timing attacks
  • Test for directory traversal

Release Candidate

Once the following requirements are met, Wildboar IMAP Server version 1.0.0 will be released.

  • 100% JSDoc Documentation
  • User Acceptance Testing

Future Features

The following features will be added some time after the release of version 1.0.0.

  • Visual Studio Solution
  • Bazel build Configuration
  • Sentry Configuration
  • NPM Tasks
  • Drop capabilities
  • Cryptographically signed messages?
  • Add environment variable for signing up an account for the email list
  • Run each connection in a NodeJS Worker Thread

wildboar-imap-server's People

Contributors

jonathanwilbur avatar

Stargazers

 avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.