Created user/group handling in c
This commit is contained in:
1007
src/modb_accounting.c
Normal file
1007
src/modb_accounting.c
Normal file
File diff suppressed because it is too large
Load Diff
75
src/modb_accounting.h
Normal file
75
src/modb_accounting.h
Normal file
@@ -0,0 +1,75 @@
|
|||||||
|
#ifndef MODB_ACCOUNTING_H
|
||||||
|
#define MODB_ACCOUNTING_H
|
||||||
|
|
||||||
|
#include "database.h"
|
||||||
|
#include "modb_types.h"
|
||||||
|
|
||||||
|
|
||||||
|
// MODB Users
|
||||||
|
int modbUserById(stored_conn *sconn, modb_ref *modb, unsigned int id, int with_groups,
|
||||||
|
struct user_t **user);
|
||||||
|
int modbUserByName(stored_conn *sconn, modb_ref *modb, const char *username, int with_groups,
|
||||||
|
struct user_t **user);
|
||||||
|
int modbUserByEmail(stored_conn *sconn, modb_ref *modb, const char *email, int with_groups,
|
||||||
|
struct user_t **user);
|
||||||
|
int modbUserSearch(stored_conn *sconn, modb_ref *modb, const char *username_email, int with_groups,
|
||||||
|
struct user_t **user);
|
||||||
|
|
||||||
|
int modbUserList(stored_conn *sconn, modb_ref *modb, int with_deleted, int with_groups,
|
||||||
|
struct user_t ***users, size_t *n_users);
|
||||||
|
|
||||||
|
int64_t modbUserCreate(stored_conn *sconn, modb_ref *modb,
|
||||||
|
unsigned int id, const char *username, const char *email);
|
||||||
|
int64_t modbUserUpdate(stored_conn *sconn, modb_ref *modb, unsigned int id,
|
||||||
|
const char *username, const char *email);
|
||||||
|
int modbUserDelete(stored_conn *sconn, modb_ref *modb, int id);
|
||||||
|
int modbUserDestroy(stored_conn *sconn, modb_ref *modb, int id);
|
||||||
|
|
||||||
|
|
||||||
|
// MODB Groups
|
||||||
|
int modbGroupById(stored_conn *sconn, modb_ref *modb, unsigned int id, int with_members,
|
||||||
|
struct group_t **group);
|
||||||
|
int modbGroupByName(stored_conn *sconn, modb_ref *modb, const char *name, int with_members,
|
||||||
|
struct group_t **group);
|
||||||
|
|
||||||
|
int modbGroupList(stored_conn *sconn, modb_ref *modb, int with_deleted, int with_members,
|
||||||
|
struct group_t ***groups, size_t *n_groups);
|
||||||
|
|
||||||
|
int64_t modbGroupCreate(stored_conn *sconn, modb_ref *modb,
|
||||||
|
unsigned int id, const char *name);
|
||||||
|
int64_t modbGroupUpdate(stored_conn *sconn, modb_ref *modb, unsigned int id,
|
||||||
|
const char *name);
|
||||||
|
int modbGroupDelete(stored_conn *sconn, modb_ref *modb, int id);
|
||||||
|
int modbGroupDestroy(stored_conn *sconn, modb_ref *modb, int id);
|
||||||
|
|
||||||
|
|
||||||
|
// MODB Users <-> Groups
|
||||||
|
int modbSyncUserGroups(stored_conn *sconn, modb_ref *modb,
|
||||||
|
unsigned int user_id, size_t n_groups, unsigned int *group_id);
|
||||||
|
int modbSyncUserGroups_va(stored_conn *sconn, modb_ref *modb,
|
||||||
|
unsigned int user_id, size_t n_groups, ...);
|
||||||
|
int modbSyncGroupUsers(stored_conn *sconn, modb_ref *modb,
|
||||||
|
unsigned int group_id, size_t n_users, unsigned int *user_id);
|
||||||
|
int modbSyncGroupUsers_va(stored_conn *sconn, modb_ref *modb,
|
||||||
|
unsigned int group_id, size_t n_users, ...);
|
||||||
|
|
||||||
|
|
||||||
|
int modbFetchUserGroupIds(stored_conn *sconn, modb_ref *modb, int with_deleted,
|
||||||
|
unsigned int user_id, size_t *n_groups, unsigned int **group_ids);
|
||||||
|
int modbFetchGroupUserIds(stored_conn *sconn, modb_ref *modb, int with_deleted,
|
||||||
|
unsigned int group_id, size_t *n_users, unsigned int **user_ids);
|
||||||
|
int modbFetchUserGroups(stored_conn *sconn, modb_ref *modb, int with_deleted,
|
||||||
|
unsigned int user_id, size_t *n_groups, struct group_t ***groups);
|
||||||
|
int modbFetchGroupUsers(stored_conn *sconn, modb_ref *modb, int with_deleted,
|
||||||
|
unsigned int group_id, size_t *n_users, struct user_t ***users);
|
||||||
|
|
||||||
|
|
||||||
|
int modbIsLinked_Group_User(stored_conn *sconn, modb_ref *modb,
|
||||||
|
unsigned int user_id, unsigned int group_id);
|
||||||
|
int modbLink_Group_User(stored_conn *sconn, modb_ref *modb,
|
||||||
|
unsigned int user_id, unsigned int group_id);
|
||||||
|
int modbUnlink_Group_User(stored_conn *sconn, modb_ref *modb,
|
||||||
|
unsigned int user_id, unsigned int group_id);
|
||||||
|
|
||||||
|
|
||||||
|
#endif // MODB_ACCOUNTING_H
|
||||||
117
src/modb_types.c
117
src/modb_types.c
@@ -7,3 +7,120 @@
|
|||||||
#include "strext.h"
|
#include "strext.h"
|
||||||
|
|
||||||
|
|
||||||
|
struct user_t *allocUser(void)
|
||||||
|
{
|
||||||
|
struct user_t *user;
|
||||||
|
|
||||||
|
user = malloc(sizeof(struct user_t));
|
||||||
|
if (user == 0) {
|
||||||
|
fprintf(stderr, "[%d]malloc: (%d) %s\n", __LINE__, errno, strerror(errno));
|
||||||
|
}
|
||||||
|
memset(user, 0, sizeof(struct user_t));
|
||||||
|
|
||||||
|
return user;
|
||||||
|
}
|
||||||
|
struct user_t **allocUsers(size_t n_users)
|
||||||
|
{
|
||||||
|
struct user_t **users;
|
||||||
|
|
||||||
|
users = (struct user_t **)malloc(sizeof(struct user_t *) * n_users);
|
||||||
|
if (users == 0) {
|
||||||
|
fprintf(stderr, "[%d]malloc: (%d) %s\n", __LINE__, errno, strerror(errno));
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
memset(users, 0, sizeof(struct user_t *) * n_users);
|
||||||
|
|
||||||
|
return users;
|
||||||
|
}
|
||||||
|
void freeUser(struct user_t **user_ptr)
|
||||||
|
{
|
||||||
|
struct user_t *user = *user_ptr;
|
||||||
|
|
||||||
|
if (user->n_groups > 0) {
|
||||||
|
freeGroups(user->groups, user->n_groups);
|
||||||
|
user->groups = 0;
|
||||||
|
user->n_groups = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (user->email != 0) {
|
||||||
|
free(user->email);
|
||||||
|
user->email = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (user->username != 0) {
|
||||||
|
free(user->username);
|
||||||
|
user->username = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
free(user);
|
||||||
|
*user_ptr = 0;
|
||||||
|
}
|
||||||
|
void freeUsers(struct user_t **users, size_t n_users)
|
||||||
|
{
|
||||||
|
size_t idx;
|
||||||
|
|
||||||
|
for (idx = 0; idx < n_users; idx++) {
|
||||||
|
if (*(users + idx) != 0) {
|
||||||
|
freeUser((users + idx));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
free(users);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
struct group_t *allocGroup(void)
|
||||||
|
{
|
||||||
|
struct group_t *group;
|
||||||
|
|
||||||
|
group = malloc(sizeof(struct group_t));
|
||||||
|
if (group == 0) {
|
||||||
|
fprintf(stderr, "[%d]malloc: (%d) %s\n", __LINE__, errno, strerror(errno));
|
||||||
|
}
|
||||||
|
memset(group, 0, sizeof(struct group_t));
|
||||||
|
|
||||||
|
return group;
|
||||||
|
}
|
||||||
|
struct group_t **allocGroups(size_t n_groups)
|
||||||
|
{
|
||||||
|
struct group_t **groups;
|
||||||
|
|
||||||
|
groups = (struct group_t **)malloc(sizeof(struct group_t *) * n_groups);
|
||||||
|
if (groups == 0) {
|
||||||
|
fprintf(stderr, "[%d]malloc: (%d) %s\n", __LINE__, errno, strerror(errno));
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
memset(groups, 0, sizeof(struct group_t *) * n_groups);
|
||||||
|
|
||||||
|
return groups;
|
||||||
|
}
|
||||||
|
void freeGroup(struct group_t **group_ptr)
|
||||||
|
{
|
||||||
|
struct group_t *group = *group_ptr;
|
||||||
|
|
||||||
|
if (group->n_members > 0) {
|
||||||
|
freeUsers(group->members, group->n_members);
|
||||||
|
group->members = 0;
|
||||||
|
group->n_members = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (group->name != 0) {
|
||||||
|
free(group->name);
|
||||||
|
group->name = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
free(group);
|
||||||
|
*group_ptr = 0;
|
||||||
|
}
|
||||||
|
void freeGroups(struct group_t **groups, size_t n_groups)
|
||||||
|
{
|
||||||
|
size_t idx;
|
||||||
|
|
||||||
|
for (idx = 0; idx < n_groups; idx++) {
|
||||||
|
if (*(groups + idx) != 0) {
|
||||||
|
freeGroup((groups + idx));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
free(groups);
|
||||||
|
}
|
||||||
|
|||||||
@@ -10,5 +10,47 @@ struct modb_ref_t {
|
|||||||
};
|
};
|
||||||
typedef struct modb_ref_t modb_ref;
|
typedef struct modb_ref_t modb_ref;
|
||||||
|
|
||||||
|
struct user_t {
|
||||||
|
unsigned int id;
|
||||||
|
|
||||||
|
char *username;
|
||||||
|
size_t username_len;
|
||||||
|
|
||||||
|
char *email;
|
||||||
|
size_t email_len;
|
||||||
|
|
||||||
|
unsigned int created_on;
|
||||||
|
unsigned int updated_on;
|
||||||
|
unsigned int deleted_on;
|
||||||
|
|
||||||
|
struct group_t **groups;
|
||||||
|
size_t n_groups;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct group_t {
|
||||||
|
unsigned int id;
|
||||||
|
|
||||||
|
char *name;
|
||||||
|
size_t name_len;
|
||||||
|
|
||||||
|
unsigned int created_on;
|
||||||
|
unsigned int updated_on;
|
||||||
|
unsigned int deleted_on;
|
||||||
|
|
||||||
|
struct user_t **members;
|
||||||
|
size_t n_members;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
struct user_t *allocUser(void);
|
||||||
|
struct user_t **allocUsers(size_t n_users);
|
||||||
|
void freeUser(struct user_t **user);
|
||||||
|
void freeUsers(struct user_t **users, size_t n_users);
|
||||||
|
|
||||||
|
struct group_t *allocGroup(void);
|
||||||
|
struct group_t **allocGroups(size_t n_groups);
|
||||||
|
void freeGroup(struct group_t **group);
|
||||||
|
void freeGroups(struct group_t **groups, size_t n_groups);
|
||||||
|
|
||||||
|
|
||||||
#endif // H__MODB_TYPES__
|
#endif // H__MODB_TYPES__
|
||||||
|
|||||||
Reference in New Issue
Block a user