// Kyoo - A portable and vast media library solution. // Copyright (c) Kyoo. // // See AUTHORS.md and LICENSE file in the project root for full license information. // // Kyoo is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // any later version. // // Kyoo is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Kyoo. If not, see . using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using Kyoo.Abstractions.Controllers; using Kyoo.Abstractions.Models.Attributes; using Kyoo.Utils; using Newtonsoft.Json; namespace Kyoo.Abstractions.Models { /// /// A single user of the app. /// public class User : IQuery, IResource, IAddedDate { public static Sort DefaultSort => new Sort.By(x => x.Username); /// public Guid Id { get; set; } /// [MaxLength(256)] public string Slug { get; set; } /// /// A username displayed to the user. /// public string Username { get; set; } /// /// The user email address. /// public string Email { get; set; } /// /// The user password (hashed, it can't be read like that). The hashing format is implementation defined. /// [SerializeIgnore] public string? Password { get; set; } /// /// Does the user can sign-in with a password or only via oidc? /// public bool HasPassword => Password != null; /// /// The list of permissions of the user. The format of this is implementation dependent. /// public string[] Permissions { get; set; } = Array.Empty(); /// public DateTime AddedDate { get; set; } /// /// User settings /// public Dictionary Settings { get; set; } = new(); /// /// User accounts on other services. /// public Dictionary ExternalId { get; set; } = new(); public User() { } [JsonConstructor] public User(string username) { if (username != null) { Slug = Utility.ToSlug(username); Username = username; } } } public class ExternalToken { /// /// The id of this user on the external service. /// public string Id { get; set; } /// /// The username on the external service. /// public string Username { get; set; } /// /// The link to the user profile on this website. Null if it does not exist. /// public string? ProfileUrl { get; set; } /// /// A jwt token used to interact with the service. /// Do not forget to refresh it when using it if necessary. /// public JwtToken Token { get; set; } } }