Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 10 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@
[![Build Status](https://travis-ci.org/Longi94/JavaSteam.svg?branch=master)](https://travis-ci.org/Longi94/JavaSteam) [![codecov](https://codecov.io/gh/Longi94/JavaSteam/branch/master/graph/badge.svg)](https://codecov.io/gh/Longi94/JavaSteam)
[![Discord](https://img.shields.io/discord/420907597906968586.svg)](https://discord.gg/8F2JuTu)

Work-in-progress Java port of [SteamKit2](https://github.com/SteamRE/SteamKit). JavaSteam targets Java 7.
Work-in-progress Java port of [SteamKit2](https://github.com/SteamRE/SteamKit). JavaSteam targets Java 8.

## Download

Version 1.1.0 is available through [Maven](https://mvnrepository.com/artifact/in.dragonbra/javasteam)
Latest version is available through [Maven](https://mvnrepository.com/artifact/in.dragonbra/javasteam)

If you get a `java.security.InvalidKeyException: Illegal key size or default parameters` exception when trying to encrypt a message you need to download the [Unlimited Strength Jurisdiction Policy Files](http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html) and place them under `${java.home}/jre/lib/security/`. See [this stackoverflow question](https://stackoverflow.com/questions/6481627/java-security-illegal-key-size-or-default-parameters).

Expand Down Expand Up @@ -47,21 +47,25 @@ Maven

Gradle
```groovy
implementation 'org.bouncycastle:bcprov-jdk15on:1.69' // NON-ANDROID ONLY
implementation 'com.madgag.spongycastle:prov:1.58.0.0' // ANDROID ONLY
// https://mvnrepository.com/artifact/org.bouncycastle/bcprov-jdk15on
implementation 'org.bouncycastle:bcprov-jdk15on:x.y.z>' // NON-ANDROID ONLY
// https://mvnrepository.com/artifact/com.madgag.spongycastle/prov
implementation 'com.madgag.spongycastle:prov:x.y.z' // ANDROID ONLY
```

Maven
```xml
<!-- https://mvnrepository.com/artifact/org.bouncycastle/bcprov-jdk15on -->
<dependency> <!-- NON-ANDROID ONLY -->
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15on</artifactId>
<version>1.69</version>
<version>x.y.z</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.madgag.spongycastle/prov -->
<dependency> <!-- ANDROID ONLY -->
<groupId>com.madgag.spongycastle</groupId>
<artifactId>prov</artifactId>
<version>1.58.0.0</version>
<version>x.y.z</version>
</dependency>
```

Expand Down
228 changes: 116 additions & 112 deletions build.gradle
Original file line number Diff line number Diff line change
@@ -1,159 +1,163 @@
import in.dragonbra.steamlanguagegen.SteamLanguageGenPlugin

buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.google.protobuf:protobuf-gradle-plugin:0.8.17'
}
//file:noinspection GroovyAssignabilityCheck

// https://mvnrepository.com/artifact/io.github.gradle-nexus/publish-plugin
// https://mvnrepository.com/artifact/com.google.protobuf/protobuf-gradle-plugin
plugins {
id "io.github.gradle-nexus.publish-plugin" version "1.1.0"
id 'com.google.protobuf' version "0.9.1"
id 'jacoco'
id 'java'
id 'maven-publish'
id 'signing'
id 'steamlanguagegen'
id 'projectversiongen'
}

group 'in.dragonbra'
version '1.1.0'

allprojects {
group 'in.dragonbra'
version '1.1.0'
version '1.2.0-SNAPSHOT'
}

apply plugin: 'maven'
apply plugin: 'signing'
apply plugin: 'java'
apply plugin: 'com.google.protobuf'
apply plugin: 'jacoco'
apply plugin: SteamLanguageGenPlugin

sourceCompatibility = 1.7
sourceCompatibility = 1.8

repositories {
mavenCentral()
}

dependencies {
implementation 'com.google.code.gson:gson:2.8.9'
implementation 'com.google.protobuf:protobuf-java:3.19.3'
implementation 'com.squareup.okhttp3:okhttp:3.14.9'
implementation 'commons-validator:commons-validator:1.7'
implementation 'org.apache.commons:commons-lang3:3.12.0'
implementation 'org.java-websocket:Java-WebSocket:1.5.2'
testCompile 'com.squareup.okhttp3:mockwebserver:3.14.9'
testCompile 'commons-codec:commons-codec:1.15'
testCompile 'commons-io:commons-io:2.11.0'
testCompile 'junit:junit:4.13.2'
testCompile 'org.bouncycastle:bcprov-jdk15on:1.69'
testCompile 'org.mockito:mockito-core:3.12.4'
testCompile 'pl.pragmatists:JUnitParams:1.1.1'
// https://mvnrepository.com/artifact/com.google.protobuf/protoc
protobuf.protoc {
artifact = 'com.google.protobuf:protoc:3.21.12'
}

protobuf {
protoc {
artifact = 'com.google.protobuf:protoc:3.18.0'
}
}
// https://www.eclemma.org/jacoco
jacoco.toolVersion = "0.8.8"

jacoco {
toolVersion = "0.8.7"
jacocoTestReport.reports {
xml.required = true
html.required = false
}

jacocoTestReport {
reports {
xml.enabled true
html.enabled false
}
javadoc {
exclude "**/in/dragonbra/javasteam/protobufs/**"
}

sourceSets {
main {
java {
srcDirs += new File(buildDir, 'generated/source/steamd/main/java')
srcDirs += new File(buildDir, 'generated/source/proto/main/java')
srcDirs += new File(buildDir, 'generated/source/javasteam/main/java')
}
}
test {
useJUnitPlatform()
}

task sourcesJar(type: Jar, dependsOn: classes) {
classifier = 'sources'
from sourceSets.main.allSource
java {
withSourcesJar()
withJavadocJar()
}

task javadocJar(type: Jar, dependsOn: javadoc) {
classifier = 'javadoc'
from javadoc.destinationDir
// Note: Only allow junit 5
configurations {
configureEach {
exclude group: 'junit', module: 'junit'
exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
}
}

task generatVersionClass {
def generatedDir = file("$buildDir/generated/source/javasteam/main/java")
def outputDir = file("$generatedDir/in/dragonbra/javasteam/util")
outputs.dir outputDir
doFirst {
outputDir.exists() || outputDir.mkdirs()
new File(outputDir, "Versions.java")
.write("""package in.dragonbra.javasteam.util;

public class Versions {
public static final String VERSION = \"$project.version\";
}""")
}
// Note: builtBy() fixes gradle warning "Execution optimizations have been disabled for task"
sourceSets.main {
java.srcDirs(
files("build/generated/source/steamd/main/java").builtBy(generateSteamLanguage),
files("build/generated/source/javasteam/main/java").builtBy(generateProjectVersion)
)
}

compileJava.dependsOn generatVersionClass
compileJava.dependsOn generateSteamLanguage
check.dependsOn jacocoTestReport
compileJava.dependsOn(generateSteamLanguage)
compileJava.dependsOn(generateProjectVersion)

javadoc {
exclude "**/in/dragonbra/javasteam/protobufs/**"
}

artifacts {
archives sourcesJar
archives javadocJar
dependencies {
// https://mvnrepository.com/artifact/com.google.code.gson/gson
implementation 'com.google.code.gson:gson:2.10'
// https://mvnrepository.com/artifact/com.google.protobuf/protobuf-java
implementation 'com.google.protobuf:protobuf-java:3.21.12'
// https://mvnrepository.com/artifact/com.squareup.okhttp3/okhttp
implementation 'com.squareup.okhttp3:okhttp:4.10.0'
// https://mvnrepository.com/artifact/commons-validator/commons-validator
implementation 'commons-validator:commons-validator:1.7'
// https://mvnrepository.com/artifact/org.apache.commons/commons-lang3
implementation 'org.apache.commons:commons-lang3:3.12.0'
// https://mvnrepository.com/artifact/org.java-websocket/Java-WebSocket
implementation 'org.java-websocket:Java-WebSocket:1.5.3'

/* Unit Testing */

// https://mvnrepository.com/artifact/com.squareup.okhttp3/mockwebserver3-junit5
testImplementation 'com.squareup.okhttp3:mockwebserver3-junit5:5.0.0-alpha.10'
// https://mvnrepository.com/artifact/commons-codec/commons-codec
testImplementation 'commons-codec:commons-codec:1.15'
// https://mvnrepository.com/artifact/commons-io/commons-io
testImplementation 'commons-io:commons-io:2.11.0'
// https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-api
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.9.1'
// https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-engine
testImplementation 'org.junit.jupiter:junit-jupiter-engine:5.9.1'
// https://mvnrepository.com/artifact/org.bouncycastle/bcprov-jdk15on
testImplementation 'org.bouncycastle:bcprov-jdk15on:1.70'
// https://mvnrepository.com/artifact/org.mockito/mockito-core
testImplementation 'org.mockito:mockito-core:4.10.0'
// https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-params
testImplementation 'org.junit.jupiter:junit-jupiter-params:5.9.1'
// https://mvnrepository.com/artifact/org.mockito/mockito-junit-jupiter
testImplementation 'org.mockito:mockito-junit-jupiter:4.10.0'
}

signing {
sign configurations.archives
}
/* Artifact publishing */

uploadArchives {
nexusPublishing {
repositories {
mavenDeployer {
beforeDeployment { MavenDeployment deployment -> signing.signPom(deployment) }

repository(url: "https://oss.sonatype.org/service/local/staging/deploy/maven2/") {
authentication(userName: ossrhUsername, password: ossrhPassword)
}
snapshotRepository(url: "https://oss.sonatype.org/content/repositories/snapshots/") {
authentication(userName: ossrhUsername, password: ossrhPassword)
}
pom.project {
name 'JavaSteam'
packaging 'jar'
description 'Java library to interact with Valve\'s Steam network.'
url 'https://github.com/Longi94/JavaSteam'
inceptionYear '2018'
sonatype()
}
}

publishing {
publications {
mavenJava(MavenPublication) {
from(components.java)
pom {
name = 'JavaSteam'
packaging = 'jar'
description = 'Java library to interact with Valve\'s Steam network.'
url = 'https://github.com/Longi94/JavaSteam'
inceptionYear = '2018'
scm {
connection 'scm:git:git://github.com/Longi94/JavaSteam.git'
developerConnection 'scm:git:ssh://github.com:Longi94/JavaSteam.git'
url 'http://github.com/Longi94/JavaSteam/tree/master'
connection = 'scm:git:git://github.com/Longi94/JavaSteam.git'
developerConnection = 'scm:git:ssh://github.com:Longi94/JavaSteam.git'
url = 'http://github.com/Longi94/JavaSteam/tree/master'
}

licenses {
license {
name 'MIT License'
url 'http://www.opensource.org/licenses/mit-license.php'
name = 'MIT License'
url = 'http://www.opensource.org/licenses/mit-license.php'
}
}

developers {
developer {
id 'Longi'
name 'Long Tran'
email 'lngtrn94@gmail.com'
id = 'Longi'
name = 'Long Tran'
email = 'lngtrn94@gmail.com'
}
}
}
}
}
repositories {
maven {
def stagingRepoUrl = 'https://oss.sonatype.org/service/local/staging/deploy/maven2/'
def snapshotRepoUrl = 'https://oss.sonatype.org/content/repositories/snapshots/'
url = version.endsWith('SNAPSHOT') ? snapshotRepoUrl : stagingRepoUrl
credentials {
username = ossrhUsername ?: ''
password = ossrhPassword ?: ''
}
}
}
}

signing {
sign publishing.publications.mavenJava
}
30 changes: 27 additions & 3 deletions buildSrc/build.gradle
Original file line number Diff line number Diff line change
@@ -1,11 +1,35 @@
apply plugin: 'groovy'
//file:noinspection GroovyAssignabilityCheck

plugins {
id 'groovy'
id 'java-gradle-plugin'
}

repositories {
mavenCentral()
}

dependencies {
compile gradleApi()
compile localGroovy()
implementation gradleApi()
implementation localGroovy()

// https://mvnrepository.com/artifact/commons-io/commons-io
implementation 'commons-io:commons-io:2.11.0'
}

gradlePlugin {
plugins {
create("steamlanguagegen") {
id = "steamlanguagegen"
implementationClass = "in.dragonbra.steamlanguagegen.SteamLanguageGenPlugin"
version = "1.0.0"
group = "in.dragonbra.steamlanguagegen"
}
create("projectversiongen") {
id = "projectversiongen"
implementationClass = "in.dragonbra.versiongen.VersionGenPlugin"
version = "1.0.0"
group = "in.dragonbra.versiongen"
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package in.dragonbra.versiongen

import org.gradle.api.Plugin
import org.gradle.api.Project

@SuppressWarnings("GroovyUnusedDeclaration")
class VersionGenPlugin implements Plugin<Project> {
@Override
void apply(Project project) {
project.getTasks().register("generateProjectVersion", VersionGenTask.class)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package in.dragonbra.versiongen

import in.dragonbra.versiongen.generator.JavaGen
import org.gradle.api.DefaultTask
import org.gradle.api.tasks.OutputDirectory
import org.gradle.api.tasks.TaskAction

class VersionGenTask extends DefaultTask {

private String _package = 'in.dragonbra.javasteam.util'

private File outputDir = new File(project.buildDir, "generated/source/javasteam/main/java/$_package")

@OutputDirectory
File getOutputDir() {
return outputDir
}

@TaskAction
def generate() {
def javaGen = new JavaGen(_package, outputDir)
javaGen.emit("Versions", project.version.toString())
javaGen.flush()
javaGen.close()
}
}
Loading