mirror of
https://github.com/LemmyNet/lemmy.git
synced 2025-02-10 19:14:55 +00:00
![privacyguard](/assets/img/avatar_default.png)
* Added OAUTH2 OIDC support * Fixes and improvements based on review feedback * use derive_new::new instead of TypedBuilder * merge migrations into a single file * fixes based on review feedback * remove unnecessary hostname_ui config * improvement based on review feedback * improvements based on review feedback * delete user oauth accounts at account deletion * fixes and improvements based on review feedback * removed auto_approve_application * support registration application with sso * improvements based on review feedback * making the TokenResponse an internal struct as it should be * remove duplicate struct * prevent oauth linking to unverified accounts * switched to manually entered username and removed the oauth name claim * fix cargo fmt * fix compile error * improvements based on review feedback * fixes and improvements based on review feedback --------- Co-authored-by: privacyguard <privacyguard@users.noreply.github.com>
71 lines
1.9 KiB
Rust
71 lines
1.9 KiB
Rust
use crate::{
|
|
newtypes::OAuthProviderId,
|
|
schema::oauth_provider,
|
|
source::oauth_provider::{
|
|
OAuthProvider,
|
|
OAuthProviderInsertForm,
|
|
OAuthProviderUpdateForm,
|
|
PublicOAuthProvider,
|
|
},
|
|
traits::Crud,
|
|
utils::{get_conn, DbPool},
|
|
};
|
|
use diesel::{dsl::insert_into, result::Error, QueryDsl};
|
|
use diesel_async::RunQueryDsl;
|
|
|
|
#[async_trait]
|
|
impl Crud for OAuthProvider {
|
|
type InsertForm = OAuthProviderInsertForm;
|
|
type UpdateForm = OAuthProviderUpdateForm;
|
|
type IdType = OAuthProviderId;
|
|
|
|
async fn create(pool: &mut DbPool<'_>, form: &Self::InsertForm) -> Result<Self, Error> {
|
|
let conn = &mut get_conn(pool).await?;
|
|
insert_into(oauth_provider::table)
|
|
.values(form)
|
|
.get_result::<Self>(conn)
|
|
.await
|
|
}
|
|
|
|
async fn update(
|
|
pool: &mut DbPool<'_>,
|
|
oauth_provider_id: OAuthProviderId,
|
|
form: &Self::UpdateForm,
|
|
) -> Result<Self, Error> {
|
|
let conn = &mut get_conn(pool).await?;
|
|
diesel::update(oauth_provider::table.find(oauth_provider_id))
|
|
.set(form)
|
|
.get_result::<Self>(conn)
|
|
.await
|
|
}
|
|
}
|
|
|
|
impl OAuthProvider {
|
|
pub async fn get_all(pool: &mut DbPool<'_>) -> Result<Vec<Self>, Error> {
|
|
let conn = &mut get_conn(pool).await?;
|
|
let oauth_providers = oauth_provider::table
|
|
.order(oauth_provider::id)
|
|
.select(oauth_provider::all_columns)
|
|
.load::<OAuthProvider>(conn)
|
|
.await?;
|
|
|
|
Ok(oauth_providers)
|
|
}
|
|
|
|
pub fn convert_providers_to_public(
|
|
oauth_providers: Vec<OAuthProvider>,
|
|
) -> Vec<PublicOAuthProvider> {
|
|
let mut result = Vec::<PublicOAuthProvider>::new();
|
|
for oauth_provider in &oauth_providers {
|
|
if oauth_provider.enabled {
|
|
result.push(PublicOAuthProvider(oauth_provider.clone()));
|
|
}
|
|
}
|
|
result
|
|
}
|
|
|
|
pub async fn get_all_public(pool: &mut DbPool<'_>) -> Result<Vec<PublicOAuthProvider>, Error> {
|
|
let oauth_providers = OAuthProvider::get_all(pool).await?;
|
|
Ok(Self::convert_providers_to_public(oauth_providers))
|
|
}
|
|
}
|