Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Java wrapper for SDK #179

Merged
merged 24 commits into from
Nov 28, 2023
Merged
Show file tree
Hide file tree
Changes from 13 commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
82eefed
Java wrapper for SDK
lukpotSym Aug 21, 2023
e553d5f
Merge branch 'master' into feature/java-wrapper
lukpotSym Aug 22, 2023
36d6620
split projects and secrets from the main client
lukpotSym Aug 22, 2023
5043c7b
Merge branch 'bitwarden:master' into feature/java-wrapper
lukpotSym Sep 12, 2023
da72b7b
switch to gradle
lukpotSym Sep 19, 2023
9cf23bd
Update .github/workflows/generate_schemas.yml
lukpotSym Sep 29, 2023
ab5908c
Merge branch 'master' into feature/java-wrapper
lukpotSym Sep 29, 2023
f00e7ec
added build/publish workflows
lukpotSym Oct 2, 2023
52c5df5
switch to gradle-build-action
lukpotSym Oct 2, 2023
f71fd69
cleanup
lukpotSym Oct 4, 2023
251ef47
build.gradle updates
lukpotSym Oct 4, 2023
bb2af7f
unwrap sdk responses, addressing PR comments
lukpotSym Oct 18, 2023
243d2a2
Merge branch 'master' into feature/java-wrapper
lukpotSym Oct 18, 2023
9b11383
Apply suggestions from code review
lukpotSym Nov 23, 2023
fd3d420
Merge branch 'master' into feature/java-wrapper
lukpotSym Nov 23, 2023
b8085ca
spacing changes and tasks.json fix
lukpotSym Nov 25, 2023
75785c9
Merge branch 'master' into feature/java-wrapper
lukpotSym Nov 25, 2023
299bd8d
Update languages/java/README.md
lukpotSym Nov 27, 2023
055a429
Merge branch 'master' into feature/java-wrapper
lukpotSym Nov 27, 2023
b471480
fix path for generate_schemas workflow and run prettier on schems
lukpotSym Nov 27, 2023
c57ef08
Merge branch 'master' into feature/java-wrapper
lukpotSym Nov 27, 2023
65e25d4
fix duplicate lib files gradle issue and rename build task
lukpotSym Nov 27, 2023
7df172c
commented out jar task to unblock github workflow
lukpotSym Nov 27, 2023
40f07a5
Merge branch 'master' into feature/java-wrapper
lukpotSym Nov 27, 2023
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
68 changes: 68 additions & 0 deletions .github/workflows/build-java.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
name: Build Java SDK

on:
pull_request:
branches:
- master

jobs:
generate_schemas:
uses: ./.github/workflows/generate_schemas.yml

build_rust:
uses: ./.github/workflows/build-rust-cross-platform.yml

build_dotnet:
name: Build .NET
runs-on: ubuntu-22.04
needs:
- generate_schemas
- build_rust

steps:
- name: Checkout Repository
uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0

- name: Download Java schemas artifact
uses: actions/download-artifact@9bc31d5ccc31df68ecc42ccf4149144866c47d8a # v3.0.2
with:
name: sdk-schemas-java
path: languages/java/src/main/java/bit/sdk/schema/

- name: Setup Java
uses: actions/setup-java@0ab4596768b603586c0de567f2430c30f5b0d2b0 # v3.13.0
with:
distribution: temurin
java-version: 17

- name: Download x86_64-apple-darwin files
uses: actions/download-artifact@9bc31d5ccc31df68ecc42ccf4149144866c47d8a # v3.0.2
with:
name: libbitwarden_c_files-x86_64-apple-darwin
path: languages/java/src/main/resources/darwin-x64

- name: Download aarch64-apple-darwin files
uses: actions/download-artifact@9bc31d5ccc31df68ecc42ccf4149144866c47d8a # v3.0.2
with:
name: libbitwarden_c_files-aarch64-apple-darwin
path: languages/java/src/main/resources/darwin-aarch64

- name: Download x86_64-unknown-linux-gnu files
uses: actions/download-artifact@9bc31d5ccc31df68ecc42ccf4149144866c47d8a # v3.0.2
with:
name: libbitwarden_c_files-x86_64-unknown-linux-gnu
path: languages/java/src/main/resources/ubuntu-x64

- name: Download x86_64-pc-windows-msvc files
uses: actions/download-artifact@9bc31d5ccc31df68ecc42ccf4149144866c47d8a # v3.0.2
with:
name: libbitwarden_c_files-x86_64-pc-windows-msvc
path: languages/java/src/main/resources/windows-x64

- name: Publish Maven
uses: gradle/gradle-build-action@b5126f31dbc19dd434c3269bf8c28c315e121da2 # v2.8.1
with:
arguments: publish
build-root-directory: languages/java
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
7 changes: 7 additions & 0 deletions .github/workflows/generate_schemas.yml
Original file line number Diff line number Diff line change
Expand Up @@ -63,3 +63,10 @@ jobs:
name: sdk-schemas-json
path: ${{ github.workspace }}/support/schemas/*
if-no-files-found: error

- name: Upload java schemas artifact
uses: actions/upload-artifact@a8a3f3ad30e3422c9c7b888a15615d19a852ae32 # v3.1.3
with:
name: sdk-schemas-java
path: ${{ github.workspace }}/languages/java/src/main/java/bit/sdk/schema/*
if-no-files-found: error
lukpotSym marked this conversation as resolved.
Show resolved Hide resolved
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -49,3 +49,4 @@ crates/bitwarden-napi/src-ts/bitwarden_client/schemas.ts
languages/csharp/Bitwarden.Sdk/schemas.cs
languages/js_webassembly/bitwarden_client/schemas.ts
languages/python/BitwardenClient/schemas.py
languages/java/src/main/java/com/bitwarden/sdk/schema
lukpotSym marked this conversation as resolved.
Show resolved Hide resolved
10 changes: 9 additions & 1 deletion .vscode/tasks.json
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,14 @@
"options": {
"cwd": "${workspaceFolder}/languages/python"
}
}
},
{
"label": "buildJava",
"type": "shell",
"command": "gradle",
"args": ["build"],
"dependsOrder": "sequence",
"dependsOn": ["rust: bitwarden-c build"]
}
lukpotSym marked this conversation as resolved.
Show resolved Hide resolved
lukpotSym marked this conversation as resolved.
Show resolved Hide resolved
]
}
5 changes: 5 additions & 0 deletions languages/java/.gitignore
lukpotSym marked this conversation as resolved.
Show resolved Hide resolved
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
target
.idea
build
.gradle
src/main/resources
74 changes: 74 additions & 0 deletions languages/java/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
# Bitwarden Secrets Manager SDK

Java bindings for interacting with the [Bitwarden Secrets Manager]. This is a beta release and might be missing some
functionality.

## Create access token

Review the help documentation on [Access Tokens]

## Usage code snippets

### Create new Bitwarden client

```java
BitwardenSettings bitwardenSettings = new BitwardenSettings();
bitwardenSettings.setApiUrl("https://api.bitwarden.com");
bitwardenSettings.setIdentityUrl("https://identity.bitwarden.com");
BitwardenClient bitwardenClient = new BitwardenClient(bitwardenSettings);
bitwardenClient.accessTokenLogin("<access-token>");
```

### Create new project

```java
UUID organizationId = UUID.fromString("<organization-id>");
var projectResponse = bitwardenClient.projects().create(organizationId, "TestProject");
```

### List all projects

```java
var projectsResponse = bitwardenClient.projects().list(organizationId);
```

### Update project

```java
UUID projectId = projectResponse.getID();
projectResponse = bitwardenClient.projects().get(projectId);
projectResponse = bitwardenClient.projects.update(projectId, organizationId, "TestProjectUpdated");
```

### Add new secret

```java
String key = "key";
String value = "value";
String note = "note";
var secretResponse = bitwardenClient.secrets().create(key, value, note, organizationId, new UUID[]{projectId});
UUID secretId = secretResponse.getID();
```

### Update secret

```java
bitwardenClient.secrets().update(secretId, key2, value2, note2, organizationId, new UUID[]{projectId});
```

### List secrets

```java
var secretIdentifiersResponse secretIdentifiersResponse = bitwardenClient.secrets().list(organizationId);
```

# Delete secret or project

```java
bitwardenClient.secrets().delete(new UUID[]{secretId});
bitwardenClient.projects().delete(new UUID[]{projectId});
```

[Access Tokens]: https://bitwarden.com/help/access-tokens/

lukpotSym marked this conversation as resolved.
Show resolved Hide resolved
[Bitwarden Secrets Manager]: https://bitwarden.com/products/secrets-manager/
95 changes: 95 additions & 0 deletions languages/java/build.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
/*
* This file was generated by the Gradle 'init' task.
*/

plugins {
id 'java-library'
id 'maven-publish'
}

repositories {
mavenLocal()
maven {
url = uri('https://repo.maven.apache.org/maven2/')
}

dependencies {
api 'com.fasterxml.jackson.core:jackson-core:2.9.10'
api 'com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.9.10'
api 'net.java.dev.jna:jna-platform:5.12.1'
}

description = 'JavaWrapper'
lukpotSym marked this conversation as resolved.
Show resolved Hide resolved
java.sourceCompatibility = JavaVersion.VERSION_1_8

publishing {
publications {
maven(MavenPublication) {
groupId = 'com.bitwarden'
artifactId = 'sdk'

// Determine the version from the git history.
//
// PRs: use the branch name.
// Master: Grab it from `crates/bitwarden/Cargo.toml`

def branchName = "git branch --show-current".execute().text.trim()

if (branchName == "master") {
def content = ['grep', '-o', '^version = ".*"', '../../crates/bitwarden/Cargo.toml'].execute().text.trim()
def match = ~/version = "(.*)"/
def matcher = match.matcher(content)
matcher.find()

version = "${matcher.group(1)}-SNAPSHOT"
} else {
// branchName-SNAPSHOT
version = "${branchName.replaceAll('/', '-')}-SNAPSHOT"
}

afterEvaluate {
from components.java
}
}
}
repositories {
maven {
name = "GitHubPackages"
url = "https://maven.pkg.github.com/bitwarden/sdk"
credentials {
username = System.getenv("GITHUB_ACTOR")
password = System.getenv("GITHUB_TOKEN")
}
}
}
}
}

tasks.withType(JavaCompile) {
options.encoding = 'UTF-8'
}

tasks.withType(Javadoc) {
options.encoding = 'UTF-8'
}

//tasks.register('copyNativeLib', Copy) {
// delete 'src/main/resources/darwin-aarch64'
// from '../../target/debug'
// include '*libbitwarden_c*.dylib'
// include '*libbitwarden_c*.so'
// include '*bitwarden_c*.dll'
// into 'src/main/resources/darwin-aarch64'
//}

jar {
// Requires GitHub workflow to copy native library to resources
// Uncomment the line below and copyNativeLib task above to use the local build (modify architecture if needed)
// dependsOn tasks.named("copyNativeLib")
from('src/main/resources') {
include 'darwin-aarch64/**'
include 'darwin-x64/**'
include 'ubuntu-x64/**'
include 'windows-x64/**'
}
}
Binary file added languages/java/gradle/wrapper/gradle-wrapper.jar
Binary file not shown.
7 changes: 7 additions & 0 deletions languages/java/gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
Loading