Use POST when obtaining new stream metadata, use GET when specific stream requested

This commit is contained in:
Marcin Kulik
2024-07-01 14:02:18 +02:00
parent 63436f7016
commit 59b58adf24
2 changed files with 19 additions and 13 deletions

View File

@@ -1,6 +1,6 @@
use crate::config::Config;
use anyhow::{bail, Context, Result};
use reqwest::blocking::{multipart::Form, Client};
use reqwest::blocking::{multipart::Form, Client, RequestBuilder};
use reqwest::header;
use serde::Deserialize;
use std::env;
@@ -52,15 +52,11 @@ pub fn upload_asciicast(path: &str, config: &Config) -> Result<UploadAsciicastRe
Ok(response.json::<UploadAsciicastResponse>()?)
}
pub fn get_user_stream(stream_id: String, config: &Config) -> Result<GetUserStreamResponse> {
pub fn create_user_stream(stream_id: String, config: &Config) -> Result<GetUserStreamResponse> {
let server_url = config.get_server_url()?;
let server_hostname = server_url.host().unwrap();
let response = Client::new()
.get(user_stream_url(&server_url, stream_id))
.basic_auth("", Some(config.get_install_id()?))
.header(header::USER_AGENT, build_user_agent())
.header(header::ACCEPT, "application/json")
let response = user_stream_request(&server_url, stream_id, config)?
.send()
.context("cannot obtain stream producer endpoint")?;
@@ -106,14 +102,24 @@ fn build_user_agent() -> String {
ua.to_owned()
}
fn user_stream_url(server_url: &Url, stream_id: String) -> Url {
fn user_stream_request(
server_url: &Url,
stream_id: String,
config: &Config,
) -> Result<RequestBuilder> {
let client = Client::new();
let mut url = server_url.clone();
if stream_id.is_empty() {
url.set_path("api/user/stream");
let builder = if stream_id.is_empty() {
url.set_path("api/user/streams");
client.post(url)
} else {
url.set_path(&format!("api/user/streams/{stream_id}"));
}
client.get(url)
};
url
Ok(builder
.basic_auth(get_username(), Some(config.get_install_id()?))
.header(header::USER_AGENT, build_user_agent())
.header(header::ACCEPT, "application/json"))
}

View File

@@ -111,7 +111,7 @@ impl cli::Stream {
fn get_relay(&mut self, config: &Config) -> Result<Option<Relay>> {
match self.relay.take() {
Some(RelayTarget::StreamId(id)) => {
let stream = api::get_user_stream(id, config)?;
let stream = api::create_user_stream(id, config)?;
Ok(Some(Relay {
ws_producer_url: stream.ws_producer_url.parse()?,