ceph/src/rgw/rgw_user.h
Yehuda Sadeh be00f9b6cc rgw: pool names are not global
Move all hard coded pool names outside of the global
namespace.

Signed-off-by: Yehuda Sadeh <yehuda@inktank.com>
2012-08-29 14:22:45 -07:00

148 lines
4.1 KiB
C++

#ifndef CEPH_RGW_USER_H
#define CEPH_RGW_USER_H
#include <string>
#include "include/types.h"
#include "rgw_common.h"
#include "rgw_tools.h"
using namespace std;
#define RGW_USER_ANON_ID "anonymous"
/**
* A string wrapper that includes encode/decode functions
* for easily accessing a UID in all forms
*/
struct RGWUID
{
string user_id;
void encode(bufferlist& bl) const {
::encode(user_id, bl);
}
void decode(bufferlist::iterator& bl) {
::decode(user_id, bl);
}
};
WRITE_CLASS_ENCODER(RGWUID)
/**
* Get the anonymous (ie, unauthenticated) user info.
*/
extern void rgw_get_anon_user(RGWUserInfo& info);
/**
* verify that user is an actual user, and not the anonymous user
*/
extern bool rgw_user_is_authenticated(RGWUserInfo& info);
/**
* Save the given user information to storage.
* Returns: 0 on success, -ERR# on failure.
*/
extern int rgw_store_user_info(RGWRados *store, RGWUserInfo& info, bool exclusive);
/**
* Given an email, finds the user info associated with it.
* returns: 0 on success, -ERR# on failure (including nonexistence)
*/
extern int rgw_get_user_info_by_uid(RGWRados *store, string& user_id, RGWUserInfo& info);
/**
* Given an swift username, finds the user info associated with it.
* returns: 0 on success, -ERR# on failure (including nonexistence)
*/
extern int rgw_get_user_info_by_email(RGWRados *store, string& email, RGWUserInfo& info);
/**
* Given an swift username, finds the user info associated with it.
* returns: 0 on success, -ERR# on failure (including nonexistence)
*/
extern int rgw_get_user_info_by_swift(RGWRados *store, string& swift_name, RGWUserInfo& info);
/**
* Given an access key, finds the user info associated with it.
* returns: 0 on success, -ERR# on failure (including nonexistence)
*/
extern int rgw_get_user_info_by_access_key(RGWRados *store, string& access_key, RGWUserInfo& info);
/**
* Given an RGWUserInfo, deletes the user and its bucket ACLs.
*/
extern int rgw_delete_user(RGWRados *store, RGWUserInfo& user);
/**
* Store a list of the user's buckets, with associated functinos.
*/
class RGWUserBuckets
{
map<string, RGWBucketEnt> buckets;
public:
RGWUserBuckets() {}
void encode(bufferlist& bl) const {
::encode(buckets, bl);
}
void decode(bufferlist::iterator& bl) {
::decode(buckets, bl);
}
/**
* Check if the user owns a bucket by the given name.
*/
bool owns(string& name) {
map<string, RGWBucketEnt>::iterator iter;
iter = buckets.find(name);
return (iter != buckets.end());
}
/**
* Add a (created) bucket to the user's bucket list.
*/
void add(RGWBucketEnt& bucket) {
buckets[bucket.bucket.name] = bucket;
}
/**
* Remove a bucket from the user's list by name.
*/
void remove(string& name) {
map<string, RGWBucketEnt>::iterator iter;
iter = buckets.find(name);
if (iter != buckets.end()) {
buckets.erase(iter);
}
}
/**
* Get the user's buckets as a map.
*/
map<string, RGWBucketEnt>& get_buckets() { return buckets; }
/**
* Cleanup data structure
*/
void clear() { buckets.clear(); }
size_t count() { return buckets.size(); }
};
WRITE_CLASS_ENCODER(RGWUserBuckets)
/**
* Get all the buckets owned by a user and fill up an RGWUserBuckets with them.
* Returns: 0 on success, -ERR# on failure.
*/
extern int rgw_read_user_buckets(RGWRados *store, string user_id, RGWUserBuckets& buckets, bool need_stats);
/**
* Store the set of buckets associated with a user.
* This completely overwrites any previously-stored list, so be careful!
* Returns 0 on success, -ERR# otherwise.
*/
extern int rgw_write_buckets_attr(RGWRados *store, string user_id, RGWUserBuckets& buckets);
extern int rgw_add_bucket(RGWRados *store, string user_id, rgw_bucket& bucket);
extern int rgw_remove_user_bucket_info(RGWRados *store, string user_id, rgw_bucket& bucket);
/*
* remove the different indexes
*/
extern int rgw_remove_key_index(RGWRados *store, RGWAccessKey& access_key);
extern int rgw_remove_uid_index(RGWRados *store, string& uid);
extern int rgw_remove_email_index(RGWRados *store, string& email);
extern int rgw_remove_swift_name_index(RGWRados *store, string& swift_name);
#endif