Skip to main content

ContentApiKey

Struct ContentApiKey 

Source
pub struct ContentApiKey { /* private fields */ }
Expand description

Content API key for authentication.

The Content API uses a simple API key mechanism where the key is passed as a query parameter (?key=…) in requests. Keys are 26-character hexadecimal strings generated by Ghost.

§Format

Content API keys are 26-character hexadecimal strings (lowercase). Example: 22444f78447824223cefc48062

§Security

Content API keys are safe for public use as they only grant read access to published content. They should still be treated with care to avoid quota exhaustion.

§Example

use ghost_io_api::auth::content::ContentApiKey;

// Valid key
let key = ContentApiKey::new("22444f78447824223cefc48062").unwrap();
assert_eq!(key.as_str(), "22444f78447824223cefc48062");

// Invalid key (too short)
let result = ContentApiKey::new("invalid");
assert!(result.is_err());

Implementations§

Source§

impl ContentApiKey

Source

pub const MIN_KEY_LENGTH: usize = 26

Minimum valid key length (26 characters).

Source

pub const MAX_KEY_LENGTH: usize = 26

Maximum valid key length (26 characters).

Source

pub fn new(key: impl Into<String>) -> Result<Self>

Creates a new Content API key with validation.

§Validation
  • Must be exactly 26 characters long
  • Must contain only hexadecimal characters (0-9, a-f)
  • Automatically converts uppercase to lowercase
§Errors

Returns GhostError::Auth if:

  • Key is not 26 characters long
  • Key contains non-hexadecimal characters
  • Key is empty
§Example
use ghost_io_api::auth::content::ContentApiKey;

// Valid key
let key = ContentApiKey::new("22444f78447824223cefc48062").unwrap();
assert!(key.is_valid());

// Invalid - too short
assert!(ContentApiKey::new("short").is_err());

// Invalid - non-hex characters
assert!(ContentApiKey::new("gggggggggggggggggggggggggg").is_err());
Source

pub fn as_str(&self) -> &str

Returns the key as a string slice.

§Example
use ghost_io_api::auth::content::ContentApiKey;

let key = ContentApiKey::new("22444f78447824223cefc48062").unwrap();
assert_eq!(key.as_str(), "22444f78447824223cefc48062");
Source

pub fn as_query_param(&self) -> String

Returns the key formatted as a query parameter.

This returns the key in the format key=<value> ready to be appended to a URL query string.

§Example
use ghost_io_api::auth::content::ContentApiKey;

let key = ContentApiKey::new("22444f78447824223cefc48062").unwrap();
let param = key.as_query_param();
assert_eq!(param, "key=22444f78447824223cefc48062");

// Can be used in URLs
let url = format!("https://demo.ghost.io/ghost/api/content/posts/?{}", param);
assert!(url.contains("?key="));
Source

pub fn is_valid(&self) -> bool

Validates the key format.

Returns true if the key is valid (correct length and hex characters).

Note: This will always return true for keys created via new() since validation happens at construction time.

§Example
use ghost_io_api::auth::content::ContentApiKey;

let key = ContentApiKey::new("22444f78447824223cefc48062").unwrap();
assert!(key.is_valid());

Trait Implementations§

Source§

impl AsRef<str> for ContentApiKey

Source§

fn as_ref(&self) -> &str

Converts this type into a shared reference of the (usually inferred) input type.
Source§

impl Clone for ContentApiKey

Source§

fn clone(&self) -> ContentApiKey

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 ContentApiKey

Source§

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

Formats the value using the given formatter. Read more
Source§

impl Display for ContentApiKey

Source§

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

Formats the key for display (shows first 8 and last 4 characters).

For security, the full key is not displayed. Use as_str() if you need the complete key.

§Example
use ghost_io_api::auth::content::ContentApiKey;

let key = ContentApiKey::new("22444f78447824223cefc48062").unwrap();
let display = format!("{}", key);
assert_eq!(display, "ContentApiKey(22444f78...8062)");
Source§

impl Eq for ContentApiKey

Source§

impl PartialEq for ContentApiKey

Source§

fn eq(&self, other: &ContentApiKey) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl StructuralPartialEq for ContentApiKey

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<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<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

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> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. 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> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. Read more
Source§

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

Source§

type Error = Infallible

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