GithubHelp home page GithubHelp logo

hearthsim / twitch-hdt-ebs Goto Github PK

View Code? Open in Web Editor NEW
15.0 9.0 0.0 141 KB

๐Ÿ“ข Twitch Extension Backend Service for Hearthstone Deck Tracker.

Python 100.00%
hearthstone twitch twitch-extensions twitch-extension-backend-service django

twitch-hdt-ebs's Introduction

Twitch HDT EBS

GitHub Workflow Status

Twitch Extension Backend Service for Hearthstone Deck Tracker.

API Usage

Authentication

Authentication happens exclusively through HSReplay.net OAuth2. The API accepts valid OAuth2 Bearer Tokens.

Twitch Metadata Headers

With every request, the following two headers should be send:

  • X-Twitch-Client-Id: The client ID of the configured extension. An HTTP 400 will be returned if this header is missing or not valid.
  • X-Twitch-User-Id: The Twitch User ID (channel ID) of the user's Twitch channel. An HTTP 400 will be returned if this header is missing.
  • X-Twitch-Extension-Version: The version of the extension that has been installed. Only used if available (eg. by Javascript clients).

The Twitch User ID must correspond to a linked Twitch account on HSReplay.net for the same account as the one the client authenticates itself against. If the User ID is not one of the account's linked Twitch accounts, an HTTP 403 will be returned with the error channel_not_allowed and extra details. Example:

POST /send/ HTTP/1.1
Accept: application/json
Authorization: Bearer xxxxxxxxxxxx
X-Twitch-Client-Id: d72hk844mgvex3kbfhrgjtdoeqrh0t
X-Twitch-User-Id: 1111111
...

HTTP/1.0 403 Forbidden
Allow: POST, OPTIONS
Content-Type: application/json

{
    "available_channels": ["123456", "123654"],
    "error": "channel_not_allowed",
    "detail": "No permission for channel '1111111'"
}

POST /send/: PubSub Send endpoint

The /send/ endpoint allows sending pubsub JSON messages to the twitch channel specified in the X-Twitch-User-Id HTTP header. The endpoint expects a POST with data formatted as {"type": "...", "data": {...}}. The input is validated, signed with the extension's locally-configured secret, then submitted to the Twitch Extension PubSub API.

POST /setup/: Verify and update setup state

The /setup/ endpoint takes the same twitch metadata headers but expects no input. Authentication happens using a Twitch JWT which is verified then paired up with a HearthSim user. This endpoint allows verifying that OAuth2 permissions and Twitch setup is in order. Upon HTTP POST, the Twitch user's extension's required_configuration setting will be updated to signal the setup being complete, thereby allowing the user to complete the extension setup on Twitch.

EBS configuration

Settings

The EBS looks for the following application settings:

  • EBS_APPLICATIONS: A dictionary of Twitch Extension Client ID -> Configuration for each configured extension. The expected configuration is a secret string, which is the extension secret (as provided in Base64), and an owner_id string, which is the owner ID of the Twitch extension.
  • EBS_JWT_TTL_SECONDS: The TTL (in seconds) of JWTs used to communicate with the Twitch API. Default: 120

twitch-hdt-ebs's People

Contributors

beheh avatar edipo2s avatar jleclanche avatar joolean avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

twitch-hdt-ebs's Issues

Authenticate to /setup/ using Twitch JWT

Example JWT:

{
  "exp": 1506166024,
  "opaque_user_id": "U123456789",
  "user_id": "123456789",
  "channel_id": "123456789",
  "role": "broadcaster",
  "pubsub_perms": {
    "listen": [
      "broadcast",
      "whisper-U123456789"
    ],
    "send": [
      "*"
    ]
  }
}

Setup CORS headers for /setup/

The frontend needs to be able to POST to the setup endpoint. Since that's a cross-origin request, we'll need to expose the CORS-Headers when the browser sends a preflight CORS request without any Authorization.

Request

The CORS preflight request looks something like this:

OPTIONS /dev/setup/ HTTP/1.1
Access-Control-Request-Method: GET
Access-Control-Request-Headers: authorization,x-twitch-client-id,x-twitch-extension-version,x-twitch-user-id
Origin: https://d72hk844mgvex3kbfhrgjtdoeqrh0t.ext-twitch.tv

Response

The lambda should then respond with a response similar to this:

Access-Control-Allow-Origin: https://d72hk844mgvex3kbfhrgjtdoeqrh0t.ext-twitch.tv
Access-Control-Allow-Methods: POST
Access-Control-Allow-Headers: authorization,x-twitch-client-id,x-twitch-extension-version,x-twitch-user-id

Alternatively:

Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: POST
Access-Control-Allow-Headers: authorization,x-twitch-client-id,x-twitch-extension-version,x-twitch-user-id

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.