#[cfg(feature = "argon2-hasher")]
use crate::Argon2Hasher;
#[cfg(feature = "argon2-hasher")]
use crate::{BaseUser, FullUser, PermissionsMixin, User};
#[cfg(feature = "argon2-hasher")]
use chrono::{DateTime, Utc};
#[cfg(feature = "argon2-hasher")]
use reinhardt_db::orm::Model;
#[cfg(feature = "argon2-hasher")]
use serde::{Deserialize, Serialize};
#[cfg(feature = "argon2-hasher")]
use uuid::Uuid;
#[cfg(feature = "argon2-hasher")]
#[deprecated(
since = "0.1.0-rc.15",
note = "Use the `user` attribute macro to define your own user struct instead"
)]
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DefaultUser {
pub id: Uuid,
pub username: String,
pub email: String,
pub first_name: String,
pub last_name: String,
pub password_hash: Option<String>,
pub last_login: Option<DateTime<Utc>>,
pub is_active: bool,
pub is_staff: bool,
pub is_superuser: bool,
pub date_joined: DateTime<Utc>,
pub user_permissions: Vec<String>,
pub groups: Vec<String>,
}
#[cfg(feature = "argon2-hasher")]
impl BaseUser for DefaultUser {
type PrimaryKey = Uuid;
type Hasher = Argon2Hasher;
fn get_username_field() -> &'static str {
"username"
}
fn get_username(&self) -> &str {
&self.username
}
fn password_hash(&self) -> Option<&str> {
self.password_hash.as_deref()
}
fn set_password_hash(&mut self, hash: String) {
self.password_hash = Some(hash);
}
fn last_login(&self) -> Option<DateTime<Utc>> {
self.last_login
}
fn set_last_login(&mut self, time: DateTime<Utc>) {
self.last_login = Some(time);
}
fn is_active(&self) -> bool {
self.is_active
}
}
#[cfg(feature = "argon2-hasher")]
impl FullUser for DefaultUser {
fn username(&self) -> &str {
&self.username
}
fn email(&self) -> &str {
&self.email
}
fn first_name(&self) -> &str {
&self.first_name
}
fn last_name(&self) -> &str {
&self.last_name
}
fn is_staff(&self) -> bool {
self.is_staff
}
fn is_superuser(&self) -> bool {
self.is_superuser
}
fn date_joined(&self) -> DateTime<Utc> {
self.date_joined
}
}
#[cfg(feature = "argon2-hasher")]
impl PermissionsMixin for DefaultUser {
fn is_superuser(&self) -> bool {
self.is_superuser
}
fn user_permissions(&self) -> &[String] {
&self.user_permissions
}
fn groups(&self) -> &[String] {
&self.groups
}
}
#[cfg(feature = "argon2-hasher")]
#[derive(Debug, Clone)]
pub struct DefaultUserFields {
pub id: reinhardt_db::orm::query_fields::Field<DefaultUser, Uuid>,
pub username: reinhardt_db::orm::query_fields::Field<DefaultUser, String>,
pub email: reinhardt_db::orm::query_fields::Field<DefaultUser, String>,
pub first_name: reinhardt_db::orm::query_fields::Field<DefaultUser, String>,
pub last_name: reinhardt_db::orm::query_fields::Field<DefaultUser, String>,
pub password_hash: reinhardt_db::orm::query_fields::Field<DefaultUser, Option<String>>,
pub last_login: reinhardt_db::orm::query_fields::Field<DefaultUser, Option<DateTime<Utc>>>,
pub is_active: reinhardt_db::orm::query_fields::Field<DefaultUser, bool>,
pub is_staff: reinhardt_db::orm::query_fields::Field<DefaultUser, bool>,
pub is_superuser: reinhardt_db::orm::query_fields::Field<DefaultUser, bool>,
pub date_joined: reinhardt_db::orm::query_fields::Field<DefaultUser, DateTime<Utc>>,
pub user_permissions: reinhardt_db::orm::query_fields::Field<DefaultUser, Vec<String>>,
pub groups: reinhardt_db::orm::query_fields::Field<DefaultUser, Vec<String>>,
}
#[cfg(feature = "argon2-hasher")]
impl Default for DefaultUserFields {
fn default() -> Self {
Self::new()
}
}
#[cfg(feature = "argon2-hasher")]
impl DefaultUserFields {
pub fn new() -> Self {
Self {
id: reinhardt_db::orm::query_fields::Field::new(vec!["id"]),
username: reinhardt_db::orm::query_fields::Field::new(vec!["username"]),
email: reinhardt_db::orm::query_fields::Field::new(vec!["email"]),
first_name: reinhardt_db::orm::query_fields::Field::new(vec!["first_name"]),
last_name: reinhardt_db::orm::query_fields::Field::new(vec!["last_name"]),
password_hash: reinhardt_db::orm::query_fields::Field::new(vec!["password_hash"]),
last_login: reinhardt_db::orm::query_fields::Field::new(vec!["last_login"]),
is_active: reinhardt_db::orm::query_fields::Field::new(vec!["is_active"]),
is_staff: reinhardt_db::orm::query_fields::Field::new(vec!["is_staff"]),
is_superuser: reinhardt_db::orm::query_fields::Field::new(vec!["is_superuser"]),
date_joined: reinhardt_db::orm::query_fields::Field::new(vec!["date_joined"]),
user_permissions: reinhardt_db::orm::query_fields::Field::new(vec!["user_permissions"]),
groups: reinhardt_db::orm::query_fields::Field::new(vec!["groups"]),
}
}
}
#[cfg(feature = "argon2-hasher")]
impl reinhardt_db::orm::FieldSelector for DefaultUserFields {
fn with_alias(mut self, alias: &str) -> Self {
self.id = self.id.with_alias(alias);
self.username = self.username.with_alias(alias);
self.email = self.email.with_alias(alias);
self.first_name = self.first_name.with_alias(alias);
self.last_name = self.last_name.with_alias(alias);
self.password_hash = self.password_hash.with_alias(alias);
self.last_login = self.last_login.with_alias(alias);
self.is_active = self.is_active.with_alias(alias);
self.is_staff = self.is_staff.with_alias(alias);
self.is_superuser = self.is_superuser.with_alias(alias);
self.date_joined = self.date_joined.with_alias(alias);
self.user_permissions = self.user_permissions.with_alias(alias);
self.groups = self.groups.with_alias(alias);
self
}
}
#[cfg(feature = "argon2-hasher")]
impl Model for DefaultUser {
type PrimaryKey = Uuid;
type Fields = DefaultUserFields;
fn table_name() -> &'static str {
"auth_user"
}
fn new_fields() -> Self::Fields {
DefaultUserFields::new()
}
fn primary_key(&self) -> Option<Self::PrimaryKey> {
Some(self.id)
}
fn set_primary_key(&mut self, value: Self::PrimaryKey) {
self.id = value;
}
fn primary_key_field() -> &'static str {
"id"
}
}
#[cfg(feature = "argon2-hasher")]
impl Default for DefaultUser {
fn default() -> Self {
Self {
id: Uuid::nil(),
username: String::new(),
email: String::new(),
first_name: String::new(),
last_name: String::new(),
password_hash: None,
last_login: None,
is_active: true,
is_staff: false,
is_superuser: false,
date_joined: Utc::now(),
user_permissions: Vec::new(),
groups: Vec::new(),
}
}
}
#[cfg(feature = "argon2-hasher")]
#[allow(deprecated)] impl User for DefaultUser {
fn id(&self) -> String {
self.id.to_string()
}
fn username(&self) -> &str {
&self.username
}
fn get_username(&self) -> &str {
&self.username
}
fn is_authenticated(&self) -> bool {
true
}
fn is_active(&self) -> bool {
self.is_active
}
fn is_admin(&self) -> bool {
self.is_superuser
}
fn is_staff(&self) -> bool {
self.is_staff
}
fn is_superuser(&self) -> bool {
self.is_superuser
}
}