/* * Copyright (c) 2021 joshua stein * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef __USER_H__ #define __USER_H__ #include "sha2.h" #define AUTH_USER_OK 1 #define AUTH_USER_FAILED 2 #define AUTH_USER_GUEST 3 #define AUTH_USER_SIGNUP 4 #define GUEST_USERNAME "guest" struct user { unsigned long id; char username[DB_USERNAME_LENGTH + 1]; char password_hash[SHA256_DIGEST_STRING_LENGTH + 1]; /* 66 */ char password_salt[SHA256_DIGEST_STRING_LENGTH + 1]; unsigned long created_at; unsigned long last_seen_at; short is_sysop; short is_enabled; unsigned long last_motd_seen; }; struct username_cache { unsigned long id; char username[DB_USERNAME_LENGTH + 1]; }; void user_cache_usernames(void); bool user_save(struct user *user); struct user * user_find(unsigned long id); struct user * user_find_by_username(const char *username); struct username_cache * user_username(unsigned long id); short user_authenticate(struct user *user, const char *password); bool user_set_password(struct user *user, const char *password); bool user_valid_username(struct user *user, char *username, char **error); bool user_username_is_banned(char *username); unsigned long user_first_sysop_id(void); void user_change_password(struct session *s, struct user *user); void user_delete(struct user *user); #endif