GithubHelp home page GithubHelp logo

2018_2_codeloft's Introduction

Многопользовательская браузерная игра Tron Remastered

Приложение доступно по хостам:

Описание

2D игра по мотивам легендарной аркады TRON. Игра представляет собой сражение на байках, оставляющих за собой непреодолимый барьер, столкновение с которым окажется фатальным. Игроки встречаются на поле в попытках обыграть друг друга не только используя реакцию, но и интеллект. Хитрая стратегия, опыт, навыки и немного удачи в виде бонусов разбросанных по карте помогут определить кто сильнейший.

Участники

Frontend

API


/user

  • Method GET: LeaderBoard ** Take: get params "page" and "page_size" ** Return: JSON with leaders

  • Method POST: Registration ** Take: JSON with "login", "password", "email" ** Return: JSON with "user_id","login", "password", "email"

  • Method DELETE: delete user ** Take: JSON with "login", "password" ** Return: nothing

  • Method PUT: update user ** Take: JSON with "login", "password" and optional "email", "new_password", "score" ** Return: JSON with "user_id","login", "password", "email" of update user

/user/id

  • Method GET: get user with id

/session

  • Method GET: checkAuth with cookie

  • Method POST: login. set cookie **Take: JSON with "login", "password"

  • Method DELETE: logout,delete cookie **Take: JSON with "login", "password"

2018_2_codeloft's People

Contributors

malefaro avatar ryazmax avatar v-pereskokov avatar

Watchers

 avatar  avatar  avatar

Forkers

malefaro ryazmax

2018_2_codeloft's Issues

Добавить докер-сборку проекта

  • Добавить докерфайл для создания образа (на том же hello.go)
  • Привязать ветки testing и master к now (на разные хосты)
  • В makefile добавить скрипты для сборки образа

Добавить бд в контейнер с го

Добавить базу к вашему образу с го. Временно, потому база уедет жить отдельно, но для старта так удобнее (исправить докерфайл)

Написать простую первую ручку

Добавить хттп сервер (не использовать библиотеки типа mux!)

Добавить лисенера на какой-то урл. Просто hello-world. И отдавать в json в объекте какие-то данные

Мультик

  1. Отправлять инфу о том, что надо стереть след отключившегося игрока
  2. Цвет должен быть уникальным
  3. Пофиксить отжирание куска следа при коллизии

Разобраться в версиях вашего проекта

Разобраться где тестинг, где прод и где личные версии. И расписать все в readme. Сейчас непонятно что такое "релейная ветка" и что мне должно это говорить в ридми и зачем

глобальные переменные

var mu *sync.Mutex = &sync.Mutex{}

глобальные переменные часто ведут к ошибкам.
Нужно во-первых, перенести мютекс внутрь объекта, который его использует. Во-вторых, вам тут не нужен синглтон: создавайте базу в пакете main и передавайте во все хендлеры, а там уже используйте. Это значительно облегчит написание тестов в будущем. В третьих, база сама должна знать, как себя инитить: сделайте один метод Init() у объекта базы, который вызовете в main после создания объекта базы.

Это очень странно

for t := range c {

зачем вам делать работу, результат которой почти никогда не понадобится?
В зависимости от ожидаемой нагрузки, сортировать нужно либо при вставке (если очень мало записей в базу и много чтений), либо при отдаче данных (если наоборот, мало чтений, но много записей)

не надо так

Value: u.Login + "testCookie" + u.Password,

Если кука каким-то образом попадёт к злоумышленнику, вы не сможете её инвалидировать без смены пароля (а для этого требуется действие пользователя). И вы не сможете отличить две сессии пользователя друг от друга.
В значение куки надо писать либо что-то большое и случайное, и хранить у себя соответствие сессия->пользователь
Либо шифровать логин и расшифровывать обратно при получении, но в этом варианте если утечёт алгоритм шифрования и секреты, то вы скомпрометируете всех пользователей сразу. Этот способ можно улучшить, но проще хранить соответствие.

не по REST

надо в урле указывать, какой объект изменяем/удаляем:
DELETE /users/10
и пароль не надо проверять, у вас есть сессия для того, чтобы проверить, что пользователь пытается удалить , или изменить себя, а не другого

Concurent WriteJSON

Иногда при подключении пользователя вылетает concurent writejson
Нужно отправлять матрицу по сигналу Signal

Добавить тесты и travis ci

https://travis-ci.org

Написать простой тест к функции (любой) из hello.go. Добавить в make запуск тестов
Подключить travis ci (пнуть ментора, если не коннектится репа с тревисом). Чтобы подключить, нужно составить конфиг yml и закомитить. В интерфейсе активировать репу. Если все хорошо, то тревис вытащит все из репы и пойдет по своему конфигу что-то делать с вашей репой (что сами укажете)

Добавить ручку для смены языка

Добавить ручку смены языка для пользователя.
По запросу вида http://backend.codeloft.ru/api/bla/updateLanguage, менять язык (поле lang) пользователя.

Тип запроса POST

Возможные значения lang:

  • en
  • ru

Секурные куки

Добавить на куки свойства Secure и HTTP Only (зачем обсуждали)

Проверка Куки

При проверки не авторизован ли уже пользователь убрать проверку на наличие куки.
Из-за этого после перезапуска бд у пользователя есть кука, но в базе то её нет. Пользователь не может залогиниться так как кука стоит...

Возвращать 405, если пришел неверный метод

Сейчас (в каком-то окружении) можно получать пользователей вообще по всем методам. Оставить GET, остальное отбрасывать.

Разобраться, актуальна ли данная таска или это была проблема с окружением вашим

Добавить схему бд

Определиться какую бд используете: Mongo db или psql. И записать схему для psql в виде .sql файла или накидать для себя примерный формат документа в Mongo db

РК3

  • разрешить спецсимволы в пароли

  • считать очки при завершении игры

  • убрать комменты кода из кода

База слишком специфична

type DB struct {

У вас база данных становится слишком многофункциональной: она и хранит данные, и понимает, кто такой пользователь, и что такое сессия. И добавление новой модели приведёт к изменению пакета database.
Этот пакет должен уметь принимать любые объекты без изменения его кода.
Информацию, как достать тот или иной объект из базы, унесите в модели. Пусть база только хранит неизвестные данные (их можно разделять по названию, полученному извне, или по тегу у структуры, вариантов много).

не передавайте невалидные данные

page, err := strconv.Atoi(r.FormValue("page"))

нужно сначала проверить, что параметр есть, а потом уже передавать его функе, которая из строки прочтёт число. И вы не сможете отличить кейс, когда вам ничего не пришло (надо использовать дефолт), и кейс, когда пришли не числа (надо ответить ошибкой)

CHAT: cannot upgrade ws

Не получается заапгрейдить соединение вебсокета в чате

GAME: Listen player

ReadJSON выдает ошибку когда никто не пишет? Приходится делать continue

Secure cookie

Сделать в dockerfile переменную серды "production"

Настроить структуру проекта

Добавить .gitignore, конфиги нужные и папки, просто hello.go. Также добавить make файл для быстрого деплоя руками или сборки докера и деплоя

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.