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
6 changes: 3 additions & 3 deletions src/console/console.did
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ type AuthenticationConfigInternetIdentity = record {
};
type AuthenticationConfigOpenId = record {
observatory_id : opt principal;
providers : vec record { OpenIdProvider; OpenIdProviderConfig };
providers : vec record { OpenIdDelegationProvider; OpenIdProviderConfig };
};
type AuthenticationError = variant {
PrepareDelegation : PrepareDelegationError;
Expand Down Expand Up @@ -223,7 +223,7 @@ type ListSegmentsArgs = record {
segment_kind : opt StorableSegmentKind;
};
type Memory = variant { Heap; Stable };
type OpenId = record { provider : OpenIdProvider; data : OpenIdData };
type OpenId = record { provider : OpenIdDelegationProvider; data : OpenIdData };
type OpenIdData = record {
name : opt text;
locale : opt text;
Expand All @@ -233,6 +233,7 @@ type OpenIdData = record {
given_name : opt text;
preferred_username : opt text;
};
type OpenIdDelegationProvider = variant { GitHub; Google };
type OpenIdGetDelegationArgs = record {
jwt : text;
session_key : blob;
Expand All @@ -244,7 +245,6 @@ type OpenIdPrepareDelegationArgs = record {
session_key : blob;
salt : blob;
};
type OpenIdProvider = variant { GitHub; Google };
type OpenIdProviderConfig = record {
delegation : opt OpenIdProviderDelegationConfig;
client_id : text;
Expand Down
12 changes: 9 additions & 3 deletions src/console/src/auth/delegation.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,19 @@ use junobuild_auth::delegation::types::{
GetDelegationError, GetDelegationResult, OpenIdGetDelegationArgs, OpenIdPrepareDelegationArgs,
PrepareDelegationError, PreparedDelegation,
};
use junobuild_auth::openid::delegation::types::provider::OpenIdDelegationProvider;
use junobuild_auth::openid::types::interface::OpenIdCredential;
use junobuild_auth::openid::types::provider::OpenIdProvider;
use junobuild_auth::state::types::config::OpenIdProviders;
use junobuild_auth::{delegation, openid};

pub type OpenIdPrepareDelegationResult =
Result<(PreparedDelegation, OpenIdProvider, OpenIdCredential), PrepareDelegationError>;
pub type OpenIdPrepareDelegationResult = Result<
(
PreparedDelegation,
OpenIdDelegationProvider,
OpenIdCredential,
),
PrepareDelegationError,
>;

pub async fn openid_prepare_delegation(
args: &OpenIdPrepareDelegationArgs,
Expand Down
4 changes: 2 additions & 2 deletions src/console/src/auth/register.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,12 @@ use crate::types::state::OpenId;
use crate::types::state::{Account, OpenIdData, Provider};
use candid::Principal;
use junobuild_auth::delegation::types::UserKey;
use junobuild_auth::openid::delegation::types::provider::OpenIdDelegationProvider;
use junobuild_auth::openid::types::interface::OpenIdCredential;
use junobuild_auth::openid::types::provider::OpenIdProvider;

pub async fn register_account(
public_key: &UserKey,
provider: &OpenIdProvider,
provider: &OpenIdDelegationProvider,
credential: &OpenIdCredential,
) -> Result<Account, String> {
let user_id = Principal::self_authenticating(public_key);
Expand Down
1 change: 1 addition & 0 deletions src/console/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ mod rates;
mod segments;
mod store;
mod types;
mod upgrade;

use crate::types::interface::AuthenticationArgs;
use crate::types::interface::AuthenticationResult;
Expand Down
6 changes: 5 additions & 1 deletion src/console/src/memory/lifecycle.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ use crate::fees::init_factory_fees;
use crate::memory::manager::{get_memory_upgrades, init_stable_state, STATE};
use crate::rates::init::init_factory_rates;
use crate::types::state::{HeapState, ReleasesMetadata, State};
use crate::upgrade::types::upgrade::UpgradeState;
use ciborium::{from_reader, into_writer};
use ic_cdk_macros::{init, post_upgrade, pre_upgrade};
use junobuild_shared::ic::api::caller;
Expand Down Expand Up @@ -50,9 +51,12 @@ fn post_upgrade() {
let memory = get_memory_upgrades();
let state_bytes = read_post_upgrade(&memory);

let state: State = from_reader(&*state_bytes)
// TODO: remove once OpenIdProvider migrated on mainnet
let upgrade_state: UpgradeState = from_reader(&*state_bytes)
.expect("Failed to decode the state of the console in post_upgrade hook.");

let state: State = upgrade_state.into();

STATE.with(|s| *s.borrow_mut() = state);

defer_init_certified_assets();
Expand Down
4 changes: 2 additions & 2 deletions src/console/src/types.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ pub mod state {
use candid::CandidType;
use ic_ledger_types::{BlockIndex, Tokens};
use ic_stable_structures::StableBTreeMap;
use junobuild_auth::openid::types::provider::OpenIdProvider;
use junobuild_auth::openid::delegation::types::provider::OpenIdDelegationProvider;
use junobuild_auth::state::types::state::AuthenticationHeapState;
use junobuild_cdn::proposals::{ProposalsStable, SegmentDeploymentVersion};
use junobuild_cdn::storage::{ProposalAssetsStable, ProposalContentChunksStable};
Expand Down Expand Up @@ -83,7 +83,7 @@ pub mod state {

#[derive(CandidType, Serialize, Deserialize, Clone)]
pub struct OpenId {
pub provider: OpenIdProvider,
pub provider: OpenIdDelegationProvider,
pub data: OpenIdData,
}

Expand Down
56 changes: 56 additions & 0 deletions src/console/src/upgrade/impls.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
use crate::types::state::{HeapState, State};
use crate::upgrade::types::upgrade::{
UpgradeAuthenticationHeapState, UpgradeHeapState, UpgradeOpenIdProvider, UpgradeState,
};
use junobuild_auth::openid::types::provider::OpenIdProvider;
use junobuild_auth::state::types::state::{AuthenticationHeapState, OpenIdState};

impl From<UpgradeState> for State {
fn from(upgrade: UpgradeState) -> Self {
State {
stable: upgrade.stable,
heap: upgrade.heap.into(),
}
}
}

impl From<UpgradeHeapState> for HeapState {
fn from(upgrade: UpgradeHeapState) -> Self {
HeapState {
authentication: upgrade.authentication.map(|auth| auth.into()),
controllers: upgrade.controllers,
mission_controls: upgrade.mission_controls,
payments: upgrade.payments,
invitation_codes: upgrade.invitation_codes,
factory_fees: upgrade.factory_fees,
factory_rates: upgrade.factory_rates,
storage: upgrade.storage,
releases_metadata: upgrade.releases_metadata,
}
}
}

impl From<UpgradeAuthenticationHeapState> for AuthenticationHeapState {
fn from(upgrade: UpgradeAuthenticationHeapState) -> Self {
AuthenticationHeapState {
config: upgrade.config,
salt: upgrade.salt,
openid: upgrade.openid.map(|openid_state| OpenIdState {
certificates: openid_state
.certificates
.into_iter()
.map(|(provider, cert)| (provider.into(), cert))
.collect(),
}),
}
}
}

impl From<UpgradeOpenIdProvider> for OpenIdProvider {
fn from(old: UpgradeOpenIdProvider) -> Self {
match old {
UpgradeOpenIdProvider::Google => OpenIdProvider::Google,
UpgradeOpenIdProvider::GitHub => OpenIdProvider::GitHubAuth,
}
}
}
2 changes: 2 additions & 0 deletions src/console/src/upgrade/mod.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
mod impls;
pub mod types;
58 changes: 58 additions & 0 deletions src/console/src/upgrade/types.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
pub mod upgrade {
use crate::memory::manager::init_stable_state;
use crate::types::state::{
Accounts, FactoryFees, FactoryRates, IcpPayments, InvitationCodes, ReleasesMetadata,
StableState,
};
use candid::{CandidType, Deserialize};
use junobuild_auth::state::types::config::AuthenticationConfig;
use junobuild_auth::state::types::state::{OpenIdCachedCertificate, Salt};
use junobuild_shared::types::state::Controllers;
use junobuild_storage::types::state::StorageHeapState;
use serde::Serialize;
use std::collections::HashMap;

#[derive(Serialize, Deserialize)]
pub struct UpgradeState {
// Direct stable state: State that is uses stable memory directly as its store. No need for pre/post upgrade hooks.
#[serde(skip, default = "init_stable_state")]
pub stable: StableState,

pub heap: UpgradeHeapState,
}

#[derive(Default, CandidType, Serialize, Deserialize, Clone)]
pub struct UpgradeHeapState {
#[deprecated(note = "Deprecated. Use stable memory instead.")]
pub mission_controls: Accounts,
#[deprecated(note = "Deprecated. Use stable memory instead.")]
pub payments: IcpPayments,
pub invitation_codes: InvitationCodes,
pub controllers: Controllers,
pub factory_fees: Option<FactoryFees>,
pub factory_rates: Option<FactoryRates>,
pub storage: StorageHeapState,
pub authentication: Option<UpgradeAuthenticationHeapState>,
pub releases_metadata: ReleasesMetadata,
}

#[derive(Default, CandidType, Serialize, Deserialize, Clone)]
pub struct UpgradeAuthenticationHeapState {
pub config: AuthenticationConfig,
pub salt: Option<Salt>,
pub openid: Option<UpgradeOpenIdState>,
}

#[derive(Default, CandidType, Serialize, Deserialize, Clone)]
pub struct UpgradeOpenIdState {
pub certificates: HashMap<UpgradeOpenIdProvider, OpenIdCachedCertificate>,
}

#[derive(
CandidType, Serialize, Deserialize, Clone, Hash, PartialEq, Eq, PartialOrd, Ord, Debug,
)]
pub enum UpgradeOpenIdProvider {
Google,
GitHub,
}
}
8 changes: 8 additions & 0 deletions src/declarations/_factory.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,12 @@ import { idlFactory as idlFactoryConsole0014 } from '$declarations/deprecated/co
import { idlFactory as idlFactoryConsole008 } from '$declarations/deprecated/console-0-0-8-patch1.factory.did';
import { idlFactory as idlFactoryConsole015 } from '$declarations/deprecated/console-0-1-5.factory.did';
import { idlFactory as idlFactoryConsole020 } from '$declarations/deprecated/console-0-2-0.factory.did';
import { idlFactory as idlFactoryConsole033 } from '$declarations/deprecated/console-0-3-3.factory.did';
import { idlFactory as idlFactoryMissionControl0013 } from '$declarations/deprecated/mission_control-0-0-13.factory.did';
import { idlFactory as idlFactoryMissionControl0014 } from '$declarations/deprecated/mission_control-0-0-14.factory.did';
import { idlFactory as idlFactoryMissionControl004 } from '$declarations/deprecated/mission_control-0-0-4.factory.did';
import { idlFactory as idlFactoryObservatory009 } from '$declarations/deprecated/observatory-0-0-9.factory.did';
import { idlFactory as idlFactoryObservatory040 } from '$declarations/deprecated/observatory-0-4-0.factory.did';
import { idlFactory as idlFactoryOrbiter006 } from '$declarations/deprecated/orbiter-0-0-6.factory.did';
import { idlFactory as idlFactoryOrbiter007 } from '$declarations/deprecated/orbiter-0-0-7.factory.did';
import { idlFactory as idlFactoryOrbiter008 } from '$declarations/deprecated/orbiter-0-0-8.factory.did';
Expand All @@ -31,10 +33,12 @@ import type { _SERVICE as ConsoleActor0014 } from '$declarations/deprecated/cons
import type { _SERVICE as ConsoleActor008 } from '$declarations/deprecated/console-0-0-8-patch1.did';
import type { _SERVICE as ConsoleActor015 } from '$declarations/deprecated/console-0-1-5.did';
import type { _SERVICE as ConsoleActor020 } from '$declarations/deprecated/console-0-2-0.did';
import type { _SERVICE as ConsoleActor033 } from '$declarations/deprecated/console-0-3-3.did';
import type { _SERVICE as MissionControlActor0013 } from '$declarations/deprecated/mission_control-0-0-13.did';
import type { _SERVICE as MissionControlActor0014 } from '$declarations/deprecated/mission_control-0-0-14.did';
import type { _SERVICE as MissionControlActor004 } from '$declarations/deprecated/mission_control-0-0-4.did';
import type { _SERVICE as ObservatoryActor009 } from '$declarations/deprecated/observatory-0-0-9.did';
import type { _SERVICE as ObservatoryActor040 } from '$declarations/deprecated/observatory-0-4-0.did';
import type { _SERVICE as OrbiterActor006 } from '$declarations/deprecated/orbiter-0-0-6.did';
import type { _SERVICE as OrbiterActor007 } from '$declarations/deprecated/orbiter-0-0-7.did';
import type { _SERVICE as OrbiterActor008 } from '$declarations/deprecated/orbiter-0-0-8.did';
Expand All @@ -60,13 +64,15 @@ export {
idlFactoryConsole008,
idlFactoryConsole015,
idlFactoryConsole020,
idlFactoryConsole033,
idlFactoryIC,
idlFactoryMissionControl,
idlFactoryMissionControl0013,
idlFactoryMissionControl0014,
idlFactoryMissionControl004,
idlFactoryObservatory,
idlFactoryObservatory009,
idlFactoryObservatory040,
idlFactoryOrbiter,
idlFactoryOrbiter006,
idlFactoryOrbiter007,
Expand All @@ -85,13 +91,15 @@ export {
type ConsoleActor008,
type ConsoleActor015,
type ConsoleActor020,
type ConsoleActor033,
type ICActor,
type MissionControlActor,
type MissionControlActor0013,
type MissionControlActor0014,
type MissionControlActor004,
type ObservatoryActor,
type ObservatoryActor009,
type ObservatoryActor040,
type OrbiterActor,
type OrbiterActor006,
type OrbiterActor007,
Expand Down
4 changes: 4 additions & 0 deletions src/declarations/_types.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
import type * as ConsoleDid from '$declarations/console/console.did';
import type * as ConsoleDid020 from '$declarations/deprecated/console-0-2-0.did';
import type * as ConsoleDid033 from '$declarations/deprecated/console-0-3-3.did';
import type * as MissionControlDid0013 from '$declarations/deprecated/mission_control-0-0-13.did';
import type * as MissionControlDid004 from '$declarations/deprecated/mission_control-0-0-4.did';
import type * as ObservatoryDid040 from '$declarations/deprecated/observatory-0-4-0.did';
import type * as OrbiterDid006 from '$declarations/deprecated/orbiter-0-0-6.did';
import type * as OrbiterDid007 from '$declarations/deprecated/orbiter-0-0-7.did';
import type * as OrbiterDid008 from '$declarations/deprecated/orbiter-0-0-8.did';
Expand All @@ -18,11 +20,13 @@ import type * as SputnikDid from '$declarations/sputnik/sputnik.did';
export type {
ConsoleDid,
ConsoleDid020,
ConsoleDid033,
ICDid,
MissionControlDid,
MissionControlDid0013,
MissionControlDid004,
ObservatoryDid,
ObservatoryDid040,
OrbiterDid,
OrbiterDid006,
OrbiterDid007,
Expand Down
6 changes: 3 additions & 3 deletions src/declarations/console/console.did.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ export interface AuthenticationConfigInternetIdentity {
}
export interface AuthenticationConfigOpenId {
observatory_id: [] | [Principal];
providers: Array<[OpenIdProvider, OpenIdProviderConfig]>;
providers: Array<[OpenIdDelegationProvider, OpenIdProviderConfig]>;
}
export type AuthenticationError =
| {
Expand Down Expand Up @@ -277,7 +277,7 @@ export interface ListSegmentsArgs {
}
export type Memory = { Heap: null } | { Stable: null };
export interface OpenId {
provider: OpenIdProvider;
provider: OpenIdDelegationProvider;
data: OpenIdData;
}
export interface OpenIdData {
Expand All @@ -289,6 +289,7 @@ export interface OpenIdData {
given_name: [] | [string];
preferred_username: [] | [string];
}
export type OpenIdDelegationProvider = { GitHub: null } | { Google: null };
export interface OpenIdGetDelegationArgs {
jwt: string;
session_key: Uint8Array;
Expand All @@ -300,7 +301,6 @@ export interface OpenIdPrepareDelegationArgs {
session_key: Uint8Array;
salt: Uint8Array;
}
export type OpenIdProvider = { GitHub: null } | { Google: null };
export interface OpenIdProviderConfig {
delegation: [] | [OpenIdProviderDelegationConfig];
client_id: string;
Expand Down
6 changes: 3 additions & 3 deletions src/declarations/console/console.factory.certified.did.js
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ export const idlFactory = ({ IDL }) => {
user_key: IDL.Vec(IDL.Nat8),
expiration: IDL.Nat64
});
const OpenIdProvider = IDL.Variant({
const OpenIdDelegationProvider = IDL.Variant({
GitHub: IDL.Null,
Google: IDL.Null
});
Expand All @@ -38,7 +38,7 @@ export const idlFactory = ({ IDL }) => {
preferred_username: IDL.Opt(IDL.Text)
});
const OpenId = IDL.Record({
provider: OpenIdProvider,
provider: OpenIdDelegationProvider,
data: OpenIdData
});
const Provider = IDL.Variant({
Expand Down Expand Up @@ -143,7 +143,7 @@ export const idlFactory = ({ IDL }) => {
});
const AuthenticationConfigOpenId = IDL.Record({
observatory_id: IDL.Opt(IDL.Principal),
providers: IDL.Vec(IDL.Tuple(OpenIdProvider, OpenIdProviderConfig))
providers: IDL.Vec(IDL.Tuple(OpenIdDelegationProvider, OpenIdProviderConfig))
});
const AuthenticationConfigInternetIdentity = IDL.Record({
derivation_origin: IDL.Opt(IDL.Text),
Expand Down
Loading