Skip to main content

UpstreamOrder

Struct UpstreamOrder 

Source
pub struct UpstreamOrder {
Show 13 fields pub order_id: Uuid, pub upstream_order_url: String, pub upstream_finalize_url: Option<String>, pub upstream_certificate_url: Option<String>, pub csr_der: Vec<u8>, pub status: String, pub error: Option<String>, pub created_at: i64, pub updated_at: i64, pub client_ip: Option<String>, pub client_ptr: Option<String>, pub user_agent: Option<String>, pub request_id: Option<String>,
}

Fields§

§order_id: Uuid§upstream_order_url: String§upstream_finalize_url: Option<String>§upstream_certificate_url: Option<String>§csr_der: Vec<u8>

The client’s CSR, kept so a relay interrupted by a restart can still finalize upstream. See the migration for why it cannot be recovered any other way.

§status: String§error: Option<String>§created_at: i64§updated_at: i64§client_ip: Option<String>

The finalize request’s context, stored by UpstreamOrder::set_client so UpstreamOrder::client can hand it back to the audit row written when the relay settles — long after that request returned. See the migration for why it cannot come from anywhere else.

§client_ptr: Option<String>§user_agent: Option<String>§request_id: Option<String>

Implementations§

Source§

impl UpstreamOrder

Source

pub fn client(&self) -> ClientContext

The stored finalize context, in the shape an audit row takes.

Source

pub async fn set_client( order_id: &str, client: &ClientContext, database: &Database, ) -> Result<(), Error>

Records the finalize request’s context on an already-created mapping row.

A separate UPDATE rather than a parameter of UpstreamOrder::create because that runs inside SignerBackend::issue, which is handed a CSR and an order id and deliberately knows nothing about HTTP. post_finalize calls this the moment the backend answers Processing.

That leaves a window — between the backend’s own create and this UPDATE — in which a relay could theoretically settle and find no context. It cannot happen in practice: settling takes at least one round trip to the upstream CA, and this statement is a few microseconds of local work on the same task. If it ever did, the audit row would simply carry no address, which is the same degradation as a resumed order and not a wrong answer.

Source

pub async fn create( order_id: &str, upstream_order_url: &str, upstream_finalize_url: Option<&str>, csr_der: &[u8], database: &Database, ) -> Result<Option<UpstreamOrder>, Error>

Records a newly opened upstream order as processing.

Returns Ok(None) when a row for order_id already exists — the primary key rejecting a duplicate is how two concurrent finalize requests are stopped from opening two upstream orders for one local order. The caller treats that as “a relay is already running”.

Source

pub async fn find_by_order_id( order_id: &str, database: &Database, ) -> Result<Option<UpstreamOrder>, Error>

Source

pub async fn mark_valid( order_id: &str, certificate_url: Option<&str>, database: &Database, ) -> Result<(), Error>

Marks the relay finished, recording where the certificate came from.

Source

pub async fn mark_invalid( order_id: &str, error: &str, database: &Database, ) -> Result<(), Error>

Marks the relay failed, recording why for an operator to read later — the client only ever sees the problem document on the order itself.

Source

pub async fn list_processing( profiles: &[String], database: &Database, ) -> Result<Vec<UpstreamOrder>, Error>

Rows still processing, oldest first — relays whose in-memory task died with the process and need one respawned at startup.

Restricted to the profiles the calling backend actually serves, via the owning order’s own profile: several endpoints may relay to several different upstreams, and resuming another one’s order would drive it against the wrong CA. An empty profiles therefore matches nothing, which is the safe reading of “this backend serves nothing”.

Trait Implementations§

Source§

impl Clone for UpstreamOrder

Source§

fn clone(&self) -> UpstreamOrder

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for UpstreamOrder

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<'a, T, E> AsTaggedExplicit<'a, E> for T
where T: 'a,

Source§

fn explicit(self, class: Class, tag: u32) -> TaggedParser<'a, Explicit, Self, E>

Source§

impl<'a, T, E> AsTaggedImplicit<'a, E> for T
where T: 'a,

Source§

fn implicit( self, class: Class, constructed: bool, tag: u32, ) -> TaggedParser<'a, Implicit, Self, E>

Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> FromRef<T> for T
where T: Clone,

Source§

fn from_ref(input: &T) -> T

Converts to this type from a reference to the input type.
Source§

impl<A, B, T> HttpServerConnExec<A, B> for T
where B: Body,

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self> ⓘ

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self> ⓘ

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more