refactor: improve comments for clarity and update privacy references
ci / ✅ Semantic Pull Request (push) Has been cancelled
ci / 🔤 Check Spelling (push) Has been cancelled
ci / 👀 Detect Changes (push) Has been cancelled
Shorebird CI / changes (push) Has been cancelled
Shorebird CI / CSpell (push) Has been cancelled
ci / 🦀 Build ${{ matrix.crate }} (${{ matrix.os }}) (push) Has been cancelled
ci / 🎯 Build ${{ matrix.package }} (push) Has been cancelled
ci / ci (push) Has been cancelled
Shorebird CI / shorebird_code_push (push) Has been cancelled
Shorebird CI / shorebird_code_push_example (push) Has been cancelled
Shorebird CI / required (push) Has been cancelled
ci / ✅ Semantic Pull Request (push) Has been cancelled
ci / 🔤 Check Spelling (push) Has been cancelled
ci / 👀 Detect Changes (push) Has been cancelled
Shorebird CI / changes (push) Has been cancelled
Shorebird CI / CSpell (push) Has been cancelled
ci / 🦀 Build ${{ matrix.crate }} (${{ matrix.os }}) (push) Has been cancelled
ci / 🎯 Build ${{ matrix.package }} (push) Has been cancelled
ci / ci (push) Has been cancelled
Shorebird CI / shorebird_code_push (push) Has been cancelled
Shorebird CI / shorebird_code_push_example (push) Has been cancelled
Shorebird CI / required (push) Has been cancelled
Signed-off-by: Tony <tonylu@tony-cloud.com>
This commit is contained in:
@@ -89,8 +89,7 @@ bool shorebird_check_for_downloadable_update(const char *c_channel);
|
||||
* to their own stable account/device identifier. The updater persists this
|
||||
* value in state.json after a successful call.
|
||||
*/
|
||||
SHOREBIRD_EXPORT
|
||||
bool shorebird_set_device_id_override(const char *c_device_id);
|
||||
SHOREBIRD_EXPORT bool shorebird_set_device_id_override(const char *c_device_id);
|
||||
|
||||
/**
|
||||
* Synchronously download an update on the first non-null channel of:
|
||||
|
||||
@@ -169,7 +169,8 @@ pub(crate) fn open_base_lib(apks_dir: &Path, lib_name: &str) -> anyhow::Result<B
|
||||
// https://chromium.googlesource.com/chromium/src/base/+/a5ca5def0453df367b9c42e9817a33d2a21e75fe/android/java/src/org/chromium/base/library_loader/Linker.java
|
||||
// Previously I tried reading libapp.so from from the AssetManager, but
|
||||
// it does show the lib/ directory in the list of assets.
|
||||
// https://github.com/shorebirdtech/updater/pull/6
|
||||
// Historical updater context: this avoids reading libapp.so via
|
||||
// AssetManager.
|
||||
|
||||
// Ideally we would do this apk reading from the C++ side and keep the rust
|
||||
// portable, but we have a zip library here, and don't on the C++ side.
|
||||
@@ -245,7 +246,7 @@ pub fn libapp_path_from_settings(original_libapp_paths: &[String]) -> Result<Pat
|
||||
// path to the libapp.so file. This is true for the current engine, but
|
||||
// may not be true in the future. Better would be for the engine to
|
||||
// pass us the path to the base.apk.
|
||||
// https://github.com/shorebirdtech/shorebird/issues/283
|
||||
// This is fragile because Flutter passes multiple libapp paths here.
|
||||
// This is where the paths are set today:
|
||||
// First path is "libapp.so" (for dlopen), second is a full path:
|
||||
// https://github.com/flutter/engine/blob/a7c9cc58a71c5850be0215ab1997db92cc5e8d3e/shell/platform/android/io/flutter/embedding/engine/loader/FlutterLoader.java#L264
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
// buckets. They are not `extern "C"`, so cbindgen never emits them.
|
||||
//
|
||||
// Engine-side usage lives at `engine/src/flutter/shell/common/shorebird/updater.cc`
|
||||
// in the Shorebird Flutter monorepo: <https://github.com/shorebirdtech/flutter>.
|
||||
// in the open Flutter fork: <https://git.tonycloud.org/flutter/flutter>.
|
||||
use std::ffi::{CStr, CString};
|
||||
use std::os::raw::c_char;
|
||||
|
||||
|
||||
Vendored
+1
-1
@@ -72,7 +72,7 @@ pub struct UpdaterState {
|
||||
struct SerializedState {
|
||||
/// Stable per-install ID. Survives release-version changes; only
|
||||
/// reset when the app is uninstalled. Used for analytics.
|
||||
/// <https://shorebird.dev/privacy/>
|
||||
/// Treat this as privacy-sensitive update-server metadata.
|
||||
client_id: String,
|
||||
/// The release version this cache corresponds to. Mismatch with the
|
||||
/// app's reported release version triggers a wipe of all per-release
|
||||
|
||||
+24
-6
@@ -13,12 +13,7 @@ use std::sync::Mutex;
|
||||
// cbindgen looks for const, ignore these so it doesn't warn about them.
|
||||
|
||||
/// cbindgen:ignore
|
||||
#[cfg(test)]
|
||||
const DEFAULT_BASE_URL: &str = "DEFAULT_BASE_URL should be mocked using mockito::Server";
|
||||
|
||||
/// cbindgen:ignore
|
||||
#[cfg(not(test))]
|
||||
const DEFAULT_BASE_URL: &str = "https://api.shorebird.dev";
|
||||
const DEFAULT_BASE_URL: &str = "http://localhost:8080";
|
||||
|
||||
/// cbindgen:ignore
|
||||
const DEFAULT_CHANNEL: &str = "stable";
|
||||
@@ -279,6 +274,29 @@ mod tests {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
// These tests are serial because they modify global state.
|
||||
#[serial]
|
||||
#[test]
|
||||
fn set_config_defaults_to_open_self_hosted_server() -> Result<()> {
|
||||
testing_reset_config();
|
||||
|
||||
let mut yaml = fake_yaml();
|
||||
yaml.base_url = None;
|
||||
|
||||
set_config(
|
||||
fake_app_config(),
|
||||
Box::new(FakeExternalFileProvider {}),
|
||||
"first_path".into(),
|
||||
&yaml,
|
||||
NetworkHooks::default(),
|
||||
)?;
|
||||
|
||||
let config = super::with_config(|config| Ok(config.clone())).unwrap();
|
||||
assert_eq!(config.base_url, super::DEFAULT_BASE_URL);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
// These tests are serial because they modify global state.
|
||||
#[serial]
|
||||
#[test]
|
||||
|
||||
@@ -46,9 +46,8 @@ impl<'de> Deserialize<'de> for EventType {
|
||||
}
|
||||
}
|
||||
}
|
||||
/// Any edits to this struct should be made carefully and in accordance
|
||||
/// with our privacy policy:
|
||||
/// <https://docs.shorebird.dev/privacy>
|
||||
/// Any edits to this struct should be made carefully and in accordance with
|
||||
/// the configured update server's privacy policy.
|
||||
/// An event that is sent to the server when a patch is successfully installed.
|
||||
#[derive(Debug, Serialize, Deserialize, Clone)]
|
||||
pub struct PatchEvent {
|
||||
|
||||
@@ -219,17 +219,15 @@ pub struct Patch {
|
||||
pub hash_signature: Option<String>,
|
||||
}
|
||||
|
||||
/// Any edits to this struct should be made carefully and in accordance
|
||||
/// with our privacy policy:
|
||||
/// <https://docs.shorebird.dev/privacy>
|
||||
/// Any edits to this struct should be made carefully and in accordance with
|
||||
/// the configured update server's privacy policy.
|
||||
/// The request body for the patch check endpoint.
|
||||
#[derive(Debug, Serialize)]
|
||||
pub struct PatchCheckRequest {
|
||||
/// The Shorebird app_id built into the shorebird.yaml in the app.
|
||||
/// app_ids are unique to each app and are used to identify the app
|
||||
/// within Shorebird's system (similar to a bundle identifier). They
|
||||
/// within the update server (similar to a bundle identifier). They
|
||||
/// are not secret and are safe to share publicly.
|
||||
/// <https://docs.shorebird.dev/concepts>
|
||||
pub app_id: String,
|
||||
/// The Shorebird channel built into the shorebird.yaml in the app.
|
||||
/// This is not currently used, but intended for future use to allow
|
||||
|
||||
@@ -338,7 +338,8 @@ fn check_hash(path: &Path, expected_string: &str) -> anyhow::Result<()> {
|
||||
// This is a common error for developers. We could avoid it entirely
|
||||
// by sending the hash of `libapp.so` to the server and having the
|
||||
// server only send updates when the hash matches.
|
||||
// https://github.com/shorebirdtech/updater/issues/56
|
||||
// A hash mismatch usually means the same version number was reused with a
|
||||
// different app binary.
|
||||
if !hash_matches {
|
||||
bail!(
|
||||
"Update rejected: hash mismatch. Update was downloaded but \
|
||||
|
||||
Reference in New Issue
Block a user