GithubHelp home page GithubHelp logo

faraway-test's Introduction

faraway-test

codecov Go Report Card

Test task for Server Engineer

Design and implement “Word of Wisdom” tcp server.
 • TCP server should be protected from DDOS attacks with the
   Proof of Work (https://en.wikipedia.org/wiki/Proof_of_work),
   the challenge-response protocol should be used.
 • The choice of the POW algorithm should be explained.
 • After Proof Of Work verification, server should send one of
   the quotes from “word of wisdom” book or any other collection
   of the quotes.
 • Docker file should be provided both for the server and for
   the client that solves the POW challenge

Chosen POW algorithm: HashCash as it is simple enough for a test.

To run server & client:

docker-compose up
---
title: Code design
---
classDiagram
    direction LR
    namespace server {
        class ServerHandler["handler"] {
            Handle() error
        }

        class ServerPowMiddleware["middleware"] {
            Handle() error
        }

        class ServerBook["book"] {
            <<interface>>
            GetRandomQuote() string, error
        }

        class ServerPOW["POW"] {
            <<interface>>
            GenerateChallenge() string, error
            ValidateSolution(challenge string, solution int) error
        }
    }
    namespace client {
        class ClientTCP["Client"] {
            GetQuote() error
        }

        class ClientPOW["POW"] {
            <<interface>>
            SolveChallenge(challenge string, difficulty int) int
        }
    }
    namespace pow {
        class HashCash {
            GenerateChallenge() string, error
            SolveChallenge(challenge string, difficulty int) int
            ValidateSolution(challenge string, solution int) error
        }
    }
    namespace book {
        class Book {
            GetRandomQuote() string, error
        }
    }

    ServerHandler --> ServerBook
    ServerPowMiddleware --> ServerPOW
    ServerBook <|.. Book
    ServerPOW <|.. HashCash
    ClientTCP --> ClientPOW
    ClientPOW <|.. HashCash
Loading
---
title: Event design
---
sequenceDiagram
    participant Client
    participant Server

    Client ->> Server: ReqChallenge
    Server ->> Client: RepChallenge
    Client ->> Server: ReqQuote
    Server ->> Client: RepQuote
Loading

faraway-test's People

Contributors

itimky avatar

Watchers

 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.