tangled
alpha
login
or
join now
t1c.dev
/
rocksky
forked from
rocksky.app/rocksky
2
fork
atom
A decentralized music tracking and discovery platform built on AT Protocol 🎵
2
fork
atom
overview
issues
pulls
pipelines
[scrobbler] fix validate-token issue
tsiry-sandratraina.com
9 months ago
d8bf847d
9763a73d
+55
-11
3 changed files
expand all
collapse all
unified
split
crates
connect
src
players
kodi.rs
websocket.rs
scrobbler
src
handlers
mod.rs
+2
-2
crates/connect/src/players/kodi.rs
···
3
use super::Player;
4
use anyhow::Error;
5
use async_trait::async_trait;
6
-
use base64::{engine::general_purpose::STANDARD, Engine as _};
7
use jsonrpsee::{
8
core::{
9
client::ClientT,
···
13
rpc_params,
14
};
15
use reqwest::header::HeaderMap;
16
-
use serde_json::{json, Value};
17
use tokio::sync::mpsc::Sender;
18
19
#[derive(Clone)]
···
3
use super::Player;
4
use anyhow::Error;
5
use async_trait::async_trait;
6
+
use base64::{Engine as _, engine::general_purpose::STANDARD};
7
use jsonrpsee::{
8
core::{
9
client::ClientT,
···
13
rpc_params,
14
};
15
use reqwest::header::HeaderMap;
16
+
use serde_json::{Value, json};
17
use tokio::sync::mpsc::Sender;
18
19
#[derive(Clone)]
+2
-2
crates/connect/src/websocket.rs
···
3
use anyhow::Error;
4
use futures_util::{SinkExt, StreamExt};
5
use owo_colors::OwoColorize;
6
-
use serde_json::{json, Value};
7
use tokio::sync::Mutex;
8
use tokio_tungstenite::connect_async;
9
10
-
use crate::players::{get_current_player, Player};
11
12
pub async fn connect_to_rocksky_websocket(token: String) -> Result<(), Error> {
13
let rocksky_ws =
···
3
use anyhow::Error;
4
use futures_util::{SinkExt, StreamExt};
5
use owo_colors::OwoColorize;
6
+
use serde_json::{Value, json};
7
use tokio::sync::Mutex;
8
use tokio_tungstenite::connect_async;
9
10
+
use crate::players::{Player, get_current_player};
11
12
pub async fn connect_to_rocksky_websocket(token: String) -> Result<(), Error> {
13
let rocksky_ws =
+51
-7
crates/scrobbler/src/handlers/mod.rs
···
12
use crate::cache::Cache;
13
use crate::listenbrainz::submit::submit_listens;
14
use crate::listenbrainz::types::SubmitListensRequest;
15
-
use crate::BANNER;
16
17
pub mod scrobble;
18
pub mod v1;
···
123
}
124
125
#[get("/1/validate-token")]
126
-
pub async fn handle_validate_token(_req: HttpRequest) -> impl Responder {
127
-
HttpResponse::Ok().json(serde_json::json!({
128
-
"code": 200,
129
-
"message": "Token valid.",
130
-
"valid": true,
131
-
}))
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
132
}
133
134
pub async fn call_method(
···
12
use crate::cache::Cache;
13
use crate::listenbrainz::submit::submit_listens;
14
use crate::listenbrainz::types::SubmitListensRequest;
15
+
use crate::{repo, BANNER};
16
17
pub mod scrobble;
18
pub mod v1;
···
123
}
124
125
#[get("/1/validate-token")]
126
+
pub async fn handle_validate_token(
127
+
data: web::Data<Arc<Pool<Postgres>>>,
128
+
req: HttpRequest,
129
+
) -> impl Responder {
130
+
let pool = data.get_ref();
131
+
let authorization = req.headers().get("Authorization");
132
+
133
+
if authorization.is_none() {
134
+
return HttpResponse::Ok().json(serde_json::json!({
135
+
"code": 200,
136
+
"message": "Token valid.",
137
+
"valid": true,
138
+
}));
139
+
}
140
+
141
+
let authorization = authorization.unwrap();
142
+
let token = match authorization.to_str() {
143
+
Ok(token) => token
144
+
.trim_start_matches("Token ")
145
+
.trim_start_matches("Bearer ")
146
+
.trim_start_matches("token ")
147
+
.trim_start_matches("bearer "),
148
+
Err(_) => return HttpResponse::Unauthorized().finish(),
149
+
};
150
+
151
+
match repo::user::get_user_by_apikey(pool, token).await {
152
+
Ok(Some(user)) => {
153
+
return HttpResponse::Ok().json(serde_json::json!({
154
+
"code": 200,
155
+
"message": "Token valid.",
156
+
"valid": true,
157
+
"user_name": user.handle,
158
+
"permissions": vec![
159
+
"recording-metadata-write",
160
+
"recording-metadata-read"
161
+
],
162
+
}));
163
+
}
164
+
Ok(None) => {
165
+
return HttpResponse::Ok().json(serde_json::json!({
166
+
"code": 200,
167
+
"message": "Token invalid.",
168
+
"valid": false,
169
+
}));
170
+
}
171
+
Err(e) => {
172
+
println!("Error validating token: {}", e);
173
+
return HttpResponse::InternalServerError().finish();
174
+
}
175
+
}
176
}
177
178
pub async fn call_method(