Giter Site home page Giter Site logo

mainpuzzleserver's People

Contributors

amgleitman avatar asiacomeau avatar asyasky avatar azure-pipelines[bot] avatar beckbria avatar bruceleban avatar colin-home avatar davidggarber avatar dependabot[bot] avatar digit01wave avatar firetruckgit avatar jaylorch avatar jbodner09 avatar jenetlan avatar lambertwang avatar lambertwang-zz avatar metapzl avatar morganbr avatar nated-msft avatar nshomber avatar puzzleserveradmin avatar sprx97 avatar tabascq avatar tmathmeyer avatar vroo avatar zhenyar avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

mainpuzzleserver's Issues

File upload and access

We need authors to be able to upload puzzle files, and the system to deliver those files to players.

Add CI build verification for PRs

It may be nice to have some sort of continuous integration build verification for PRs and also master branch. This would catch build errors before and when they enter master so that one mistake in a PR won't break everyone's builds.

Unpack zipped ContentFiles

Some puzzle contents could be small static websites (e.g. an html page with some images). They need to end up in the same blob directory for relative links to work. A way to do that could be to accept a zip file and extract it on the server before uploading all of the files to a blob.

We would need a way to differentiate zip files that aren't intended to be extracted from those that are.

Add [Required] attribute to DB properties

If a property on an Entity Framework table is a nullable type (such as String or another class), the column is treated as optional and the DB will accept null. For values that shouldn't be null, we should set the [Required] attribute.

Implement area specific auth

  • dependent on overall auth first
  • site owners can access everything everything (if possible, add blocking specific puzzle content so that site owners can have full tech control without content access)
  • event owners can access everything related to the event (owner perms are a superset of author perms)
  • authors can only access their own puzzles, but can add new puzzles, as well as do all editing on their puzzles (including file upload & unlock mechanisms) (authors perms are a superset of players)
  • players can only access puzzles that have been unlocked for their team, team details, their profile, etc

Add unlock waves

Unlock waves should support several scenarios:

  • Manual unlocks (e.g. Start the Event)
  • Fixed time unlocks for (e.g. for PuzzleDay pre-game)
  • Time deltas from previous unlocks/actions:
    • Allow migrating timing from beta to final events without editing a bunch of dates
    • Support betas running in multiple time zones (e.g. Boston manually starts 3 hours earlier than Seattle, each should get a time wave 4 hours after starting)
    • Possibly to account for late starts

Feedback wanted on database & archiving designs

I'm currently taking feedback on how we want the database to be set up - running multiple databases is cost prohibitive and many users overlap, so splitting by event would also increase the storage cost.

My existing plan is to have a current event table for each of Puzzleday & Puzzlehunt, then an archive table for each event. Anything that does not carry over between events (puzzles, authors, etc) gets archived when the event ends and the table is cleared out for the next event. The archived data will be accessible from the un-timed events feature.

Un-timed events will allow players to register & access events that ran in the past using the same UI that was available during the event - how exactly this will work is TBD, largely depending on Azure cost models. It might range from a single archive UI that provides access to puzzles grouped by event to a complete copy of the previous event site, including theming and interactive elements.

Remove null tolerance in puzzles pages

Since some people might have databases set up, I've left in the ability to see puzzles even without specifying an event. We should remove this once everyone's databases are clean.

Implement standings tracking

Requires metapuzzle specific logic

  • Standings page/logic
  • Fastest solves page
  • State map (do we want an anonymized/filtered state map for modules so that authors can see the solve patterns for their puzzles more easily?)

Answer Submission

Players submit answers to puzzles, validate correctness, and update appropriate tables (i.e. responses)

**Cards**

Cards can be added to your board to track the progress of issues and pull requests. You can also add note cards, like this one!

Custom 404 page

A custom 404 page would be nice. Currently, returning NotFound(object? value) with a string for the value sends the user to a blank page with the string as the only content.
A custom page would be useful as it could contain more detailed information and navigation links so the user has more options other than the browser back button to return to a real page.

Implement author dashboard page

  • Submission history (depends on submission implementation)
  • Feedback history (depends on feedback system implementation)
  • Threads on the puzzle (depends on thread implementation)
  • Any solve/state tracking?

Add cooldown/lockout to prevent answer spamming

When teams are submitting incorrect answers too fast, the current system allows X unlimited submissions, followed by an increasing time backoff for Y further submissions, followed by putting the puzzle in email mode -- telling the team to email an author and the author can unlock them. We should have some combination of those.

Ensure PuzzleStatePerTeam table integrity

The PuzzleStatePerTeam table will be particularly sensitive to integrity issues since we don't want missing or duplicate entries. To handle this, we need a few things:

  1. Required attributes on the Puzzle and Team entries. That will both avoid nulls and enable cascading deletes
  2. A unique index on Puzzle+Team to prevent duplicate entries. We might want to make this the primary key.
  3. Whenever a team is created, states for all puzzles must be generated and the reverse for puzzle creation. This should happen transactionally so that we don't lose some states if the request fails or is interrupted.
    a. Ideally, this would also do transactional/locking reads such that a new team can't be created in the middle of puzzle creation or vice versa. It's not totally clear how to do that with EF or whether that's a significant concern for us since it's a fairly tight race condition.

Team Member Rules and Report

  • this needs to send an email to an alias that contain a token link. When the link is clicked that MSA is linked to that alias & the user is marked as an employee/intern.

Top level menus

Provide a place for people to start making pages and hooking them up.

Strawman proposal follows.

[Note: ~ links only available when the event is running]
[Note: * links should work for authors AND for admins, just with a different puzzle set]
[Note: ! links are admins only]

NAME OF EVENT

Puzzles
~ Solved Puzzles
~ Unsolved Puzzles

  • Administer Puzzles
  • Import Puzzles/Responses (P2 but really really helpful)

N Updates (if any) (aka Tasks and response updates - look ma, no mailer)
each update listed here in menu

Results
~ Standings
~ Fastest Solves

  • Puzzle State Map
  • Submissions
  • Puzzles in lockout

Registration
My team (if known)
Matchmaking Zone (teams ISO players, players ISO teams)
List of Teams
List of Players (full details for admins)
! Authors
! Admins

Resources
FAQ
Rules
Encodings
! Event Properties
My Events
! Events Dashboard

Sign up/Log in

Implement authentication

Server can confirm who you are and what you're allowed to access.

  • the plan of record is to use MS accounts and no AD integration.
  • also includes implementing auth-z

Heatmap colors

Deep green solved and unlocked look too similar. Dana wants the unsolved color to be purple.

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.