steamappticket

package module
v0.0.0-...-6b87dd7 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 7, 2023 License: MIT Imports: 17 Imported by: 0

README

Go Steam App Ticket Parser

This module allows you to authenticate steam users on your Go backend.

Basically a transpilation of DoctorMckay's excellent node implementation.

Usage

ParseEncryptedAppTicket (ticket, key)
  • ticket - []byte encrypted ticket data
  • key - []byte key data

Usually you get the ticket in base64 format and the key in hex format from Steam, you will need to decode both first.

If you are using encrypted app tickets you can ignore signature verification, since the encryption step validates the ticket.


import (
  "github.com/tmcarey/steam-appticket-go"
  "encoding/base64"
  "encoding/hex"
)

ticket := base64.DecodeString('<TICKET>');
key := hex.DecodeString('<KEY>');

/* Returns a SteamAppTicket */
app_ticket, err := steamappticket.ParseEncryptedAppTicket(ticket, decryptionKey)
ParseAppTicket (ticket, key)
  • ticket - []byte encrypted ticket data
  • allowInvalidSignature - bool whether or not to error if the signature is invalid

import (
  "github.com/tmcarey/steam-appticket-go"
  "encoding/base64"
)

ticket := base64.DecodeString('<TICKET>');

/* Returns a SteamAppTicket */
app_ticket, err := steamappticket.ParseEncryptedAppTicket(ticket, false)

SteamAppTicket struct

  • AuthTicket []byte: The raw authentication ticket for the app.
  • SteamID uint64: The Steam ID of the user who owns the ticket.
  • GCToken uint64: The game connect token for the app.
  • GCTokenGenerated time.Time: The time when the ticket was generated.
  • SessionExternalIP net.IP: The external IP address of the user's session.
  • ClientConnectionTime uint32: The time when the client connected to the server.
  • ClientConnectionCount uint32: The number of times the client has connected to the server.
  • Version uint32: The version of the app.
  • AppID uint32: The game's Steam App ID.
  • OwnershipTicketExternalIP net.IP: The external IP address of the user's ownership ticket.
  • OwnershipTicketInternalIP net.IP: The internal IP address of the user's ownership ticket.
  • OwnershipFlags uint32: Flags associated with the ownership ticket.
  • OwnershipTicketGenerated time.Time: The time when the ownership ticket was generated.
  • OwnershipTicketExpires time.Time: The time when the ownership ticket expires.
  • Licenses []uint32: A list of the user's licenses for the app.
  • DLC []DLCDetails: A list of details about the DLCs which the account holds.
  • Signature []byte: The signature of the ticket.
  • IsExpired bool: Indicates whether the ticket has expired.
  • HasValidSignature bool: Indicates whether the ticket has a valid signature.
  • IsValid bool: Indicates whether the ticket is valid (neither expired nor with an invalid signature).
  • UserData []byte: Additional user data associated with the ticket, created when requesting the ticket.
DLCDetails
  • AppID uint32: The DLC's App ID
  • Licenses []uint32: Package IDs of all the licenses which give the owner access to this DLC

You can read more info about how app tickets work here.

Documentation

Index

Constants

This section is empty.

Variables

View Source
var DecryptionFailedError error = &SteamAppTicketError{Message: "Failed to decrypt ticket"}
View Source
var InvalidSignatureError error = &SteamAppTicketError{Message: "Missing or Invalid Signature"}
View Source
var InvalidTicketError error = &SteamAppTicketError{Message: "Invalid ticket"}
View Source
var SteamPublicKey, _ = pem.Decode([]byte(
	`-----BEGIN PUBLIC KEY-----
MIGdMA0GCSqGSIb3DQEBAQUAA4GLADCBhwKBgQDf7BrWLBBmLBc1OhSwfFkRf53T
2Ct64+AVzRkeRuh7h3SiGEYxqQMUeYKO6UWiSRKpI2hzic9pobFhRr3Bvr/WARvY
gdTckPv+T1JzZsuVcNfFjrocejN1oWI0Rrtgt4Bo+hOneoo3S57G9F1fOpn5nsQ6
6WOiu4gZKODnFMBCiQIBEQ==
-----END PUBLIC KEY-----`))

Functions

This section is empty.

Types

type DLCDetails

type DLCDetails struct {
	AppID    uint32
	Licenses []uint32
}

type SteamAppTicket

type SteamAppTicket struct {
	SteamID                   uint64       // The Steam ID of the user who owns the ticket.
	AuthTicket                []byte       // The raw authentication ticket for the app.
	GCToken                   uint64       // The game connect token for the app.
	GCTokenGenerated          time.Time    // The time when the ticket was generated.
	SessionExternalIP         net.IP       // The external IP address of the user's session.
	ClientConnectionTime      uint32       // The time when the client connected to the server.
	ClientConnectionCount     uint32       // The number of times the client has connected to the server.
	Version                   uint32       // The version of the app.
	AppID                     uint32       // The game's Steam App ID.
	OwnershipTicketExternalIP net.IP       // The external IP address of the user's ownership ticket.
	OwnershipTicketInternalIP net.IP       // The internal IP address of the user's ownership ticket.
	OwnershipFlags            uint32       // Flags associated with the ownership ticket.
	OwnershipTicketGenerated  time.Time    // The time when the ownership ticket was generated.
	OwnershipTicketExpires    time.Time    // The time when the ownership ticket expires.
	Licenses                  []uint32     // A list of the user's licenses for the app.
	DLC                       []DLCDetails // A list of details about the DLCs which the account holds.
	Signature                 []byte       // The signature of the ticket.
	IsExpired                 bool         // Indicates whether the ticket has expired.
	HasValidSignature         bool         // Indicates whether the ticket has a valid signature.
	IsValid                   bool         // Indicates whether the ticket is valid (neither expired nor with an invalid signature).
	UserData                  []byte       // Additional user data associated with the ticket, created when requesting the ticket.
}

func ParseAppTicket

func ParseAppTicket(ticket []byte, allowInvalidSignature bool) (*SteamAppTicket, error)

*

*
* @param {[]byte} ticket - The raw encrypted ticket
* @param {bool} allowInvalidSignature - Whether to error on tickets with invalid signatures
* @returns {SteamAppTicket}

func ParseEncryptedAppTicket

func ParseEncryptedAppTicket(ticket []byte, key []byte) (*SteamAppTicket, error)

*

*
* @param {[]byte} ticket - The raw encrypted ticket
* @param {[]byte|string} encryptionKey - The raw encryption key
* @returns {SteamAppTicket}

type SteamAppTicketError

type SteamAppTicketError struct {
	Message string
}

func (*SteamAppTicketError) Error

func (e *SteamAppTicketError) Error() string

Directories

Path Synopsis
generated

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL