Skip to content

IndieGala

Paweł Lidwin edited this page Aug 12, 2023 · 3 revisions

About

digital storefront for video games, which grew out of its original offering of Indie Gala Bundles, a collections of games sold at a price determined by the purchaser and with a portion of the price going towards charity and the rest split between the game developers. IndieGala continues to offer these limited-time bundles, but have expanded to include a greater and more persistent storefront.

Login flow

IndieGala has rather unusual login flow, it relies on storing user credentials in OS keychain using keytar package and using them every time

API Endpoints

  • base url - https://www.indiegala.com
  • login uri - /login_new/gcl
  • user info uri - /login_new/user_info
  • log uri - /galaclient/add-log/install

Username + Password

To obtain the session you need to do the request to login endpoint as follows.

  • method - POST
  • URL - https://www.indiegala.com/login_new/gcl
  • Content-Type - application/x-www-form-urlencoded
  • User-Agent - galaClient

Payload is form payload with following fields:

  • usre - lowercased username
  • usrp - user password

body is JSON encoded

Possible exceptions:

  • statusCode != 200 - unknown error
  • body doesn't contain NoneType and count - unknown error
  • body.status === failure - wrong username or password

After successful response client stores username and password pair to galaClient keytar store

Then Set-Cookie header is parsed and re-used for authorization

Google login

There is also Google login method, (TBA)

Obtaining user data

Request is the same as login one except

  • METHOD - GET
  • URL - https://www.indiegala.com/login_new/user_info
  • Cookie - stored cookie from login

Response body is JSON encoded

Fields used by client:

  • _indiegala_username
  • _indiegala_userimage
  • _indiegala_user_id
  • showcase_content

After obtaining user data client stores data in following format

var _myreq = {
	 state: 0, //0 is no error, 4 is error with message, etc.
	 message: "", //can include error message (if any)
	 data: {
	         username': username,
	         'userimage': userimage,
	         'showcase_content': showcase_content,
	         'cookies': rawcookies
	 },
         platform : the_platform
};

Downloading

Endpoints

  • Base URL - https://content.indiegalacdn.com
  • url_proxy_get_latest_build_number - /get_latest_build_number
  • url_proxy_start_build_download - /start_build_download
  • url_proxy_download_chunk_batch - /download_chunk_batch