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

Working #305

Closed
wants to merge 3 commits into from
Closed
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
17 changes: 9 additions & 8 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -301,19 +301,20 @@ jobs:

- if: |
github.event_name == 'release' ||
(github.event_name == 'workflow_dispatch' && github.event.inputs.publish-python-wrapper == 'true')
name: Publish
(github.event_name == 'workflow_dispatch' && github.event.inputs.publish-python-wrapper == 'true') ||
github.event_name == 'pull_request'
name: Publish to TestPyPI
env:
TWINE_USERNAME: ${{ secrets.PYPI_USERNAME }}
TWINE_PASSWORD: ${{ secrets.PYPI_PASSWORD }}
TWINE_USERNAME: ${{ secrets.TEST_PYPI_USERNAME }}
TWINE_PASSWORD: ${{ secrets.TEST_PYPI_PASSWORD }}
run: |
twine upload --skip-existing dist/*
twine upload --repository-url https://test.pypi.org/legacy/ --skip-existing dist/*
working-directory: wrappers/python

build-javascript:
name: Build and test JavaScript wrapper
needs: [build-release]

strategy:
matrix:
architecture:
Expand All @@ -327,7 +328,7 @@ jobs:
architecture: darwin-universal

runs-on: ${{ matrix.os }}

defaults:
run:
working-directory: wrappers/javascript
Expand Down Expand Up @@ -594,4 +595,4 @@ jobs:
|| contains(needs.*.result, 'cancelled')
|| contains(needs.*.result, 'skipped')
}}
run: exit 1
run: exit 1
4 changes: 3 additions & 1 deletion src/ffi/store.rs
Original file line number Diff line number Diff line change
Expand Up @@ -470,6 +470,7 @@ pub extern "C" fn askar_store_copy(
key_method: FfiStr<'_>,
pass_key: FfiStr<'_>,
recreate: i8,
tenant_profile: FfiStr<'_>,
cb: Option<extern "C" fn(cb_id: CallbackId, err: ErrorCode, handle: StoreHandle)>,
cb_id: CallbackId,
) -> ErrorCode {
Expand All @@ -482,6 +483,7 @@ pub extern "C" fn askar_store_copy(
None => StoreKeyMethod::default()
};
let pass_key = PassKey::from(pass_key.as_opt_str()).into_owned();
let tenant_profile_str = tenant_profile.into_opt_string();
let cb = EnsureCallback::new(move |result|
match result {
Ok(handle) => cb(cb_id, ErrorCode::Success, handle),
Expand All @@ -491,7 +493,7 @@ pub extern "C" fn askar_store_copy(
spawn_ok(async move {
let result = async move {
let store = handle.load().await?;
let copied = store.copy_to(target_uri.as_str(), key_method, pass_key.as_ref(), recreate != 0).await?;
let copied = store.copy_to(target_uri.as_str(), key_method, pass_key.as_ref(), recreate != 0, tenant_profile_str).await?;
debug!("Copied store {}", handle);
Ok(StoreHandle::create(copied).await)
}.await;
Expand Down
25 changes: 18 additions & 7 deletions src/store.rs
Original file line number Diff line number Diff line change
Expand Up @@ -88,16 +88,27 @@ impl Store {
key_method: StoreKeyMethod,
pass_key: PassKey<'_>,
recreate: bool,
tenant_profile: Option<String>,
) -> Result<Self, Error> {
let default_profile = self.get_default_profile().await?;
let profile_ids = self.list_profiles().await?;
let target = target_url
.provision_backend(key_method, pass_key, Some(default_profile), recreate)
if tenant_profile.as_ref().map_or(false, |s| s.is_empty()) {
let tenant = tenant_profile.unwrap_or_else(|| String::from("default value"));
let tenant_copy = tenant.clone();
let target = target_url
.provision_backend(key_method, pass_key, Some(tenant), recreate)
.await?;
for profile in profile_ids {
copy_profile(&self.0, &target, &profile, &profile).await?;
copy_profile(&self.0, &target, &tenant_copy, &tenant_copy).await?;
Ok(Self::new(target))
} else {
let default_profile = self.get_default_profile().await?;
let profile_ids = self.list_profiles().await?;
let target = target_url
.provision_backend(key_method, pass_key, Some(default_profile), recreate)
.await?;
for profile in profile_ids {
copy_profile(&self.0, &target, &profile, &profile).await?;
}
Ok(Self::new(target))
}
Ok(Self::new(target))
}

/// Create a new profile with the given profile name
Expand Down
1 change: 1 addition & 0 deletions tests/store_copy.rs
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ fn store_copy() {
StoreKeyMethod::RawKey,
pass_key_copy,
true,
None
)
.await
.expect("Error copying store");
Expand Down
25 changes: 12 additions & 13 deletions wrappers/python/aries_askar/bindings/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,19 @@
import asyncio
import json
import logging

from ctypes import POINTER, byref, c_int8, c_int32, c_int64
from typing import Optional, Sequence, Union

from ..types import EntryOperation, KeyAlg, KeyBackend, SeedMethod

from .handle import (
EntryListHandle,
KeyEntryListHandle,
LocalKeyHandle,
ScanHandle,
SessionHandle,
StoreHandle,
StringListHandle,
)
from .lib import (
AeadParams,
ByteBuffer,
Expand All @@ -20,16 +27,6 @@
Lib,
StrBuffer,
)
from .handle import (
EntryListHandle,
KeyEntryListHandle,
LocalKeyHandle,
ScanHandle,
SessionHandle,
StoreHandle,
StringListHandle,
)


LIB = Lib()
LOGGER = logging.getLogger(__name__)
Expand Down Expand Up @@ -228,16 +225,18 @@ async def store_copy(
key_method: Optional[str] = None,
pass_key: Optional[str] = None,
recreate: bool = False,
tenant_profile: Optional[str] = None,
) -> StoreHandle:
"""Copy the Store contents to a new location."""
return await invoke_async(
"askar_store_copy",
(StoreHandle, FfiStr, FfiStr, FfiStr, c_int8),
(StoreHandle, FfiStr, FfiStr, FfiStr, c_int8, FfiStr),
handle,
target_uri,
key_method and key_method.lower(),
pass_key,
recreate,
tenant_profile,
return_type=StoreHandle,
)

Expand Down
4 changes: 2 additions & 2 deletions wrappers/python/aries_askar/store.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
"""Handling of Store instances."""

import json

from typing import Optional, Sequence, Union

from cached_property import cached_property
Expand Down Expand Up @@ -439,11 +438,12 @@ async def copy_to(
pass_key: str = None,
*,
recreate: bool = False,
tenant_profile: str = None,
) -> "Store":
"""Copy the store contents to a new location."""
return Store(
await bindings.store_copy(
self._handle, target_uri, key_method, pass_key, recreate
self._handle, target_uri, key_method, pass_key, recreate, tenant_profile
),
target_uri,
)
Expand Down
2 changes: 1 addition & 1 deletion wrappers/python/aries_askar/version.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
"""aries_askar library wrapper version."""

__version__ = "0.3.2"
__version__ = "0.3.3b11"
6 changes: 2 additions & 4 deletions wrappers/python/setup.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,11 @@
"""Module setup."""

import os
import runpy

from setuptools import find_packages, setup

PACKAGE_NAME = "aries_askar"
version_meta = runpy.run_path("./{}/version.py".format(PACKAGE_NAME))
VERSION = version_meta["__version__"]
PACKAGE_NAME = "aries_askar_jamshale"
VERSION = "0.3.3b11"

with open(os.path.abspath("./README.md"), "r") as fh:
long_description = fh.read()
Expand Down
Loading