sdks/other/ios/UGAPI/v2/UGConnection.m (798 lines of code) (raw):
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
//
// UGConnection.m
// UGAPIApp
//
// Created by Tim Burks on 3/30/13.
//
//
#import "UGHTTPHelpers.h"
#import "UGHTTPResult.h"
#import "UGConnection.h"
static NSString *boolean_representation(BOOL value)
{
return (value ? @"true" : @"false");
}
@interface UGConnection ()
@property (nonatomic, strong) NSString *token;
@property (nonatomic, strong) NSDate *tokenExpirationDate;
@end
@implementation UGConnection
+ (UGConnection *) sharedConnection
{
static UGConnection *connection = nil;
if (!connection) {
connection = [[UGConnection alloc] init];
}
return connection;
}
- (id) init {
if (self = [super init]) {
self.server = @"http://api.usergrid.com";
}
return self;
}
- (UGConnection *) copy
{
UGConnection *copy = [super copy];
copy.server = self.server;
copy.organization = self.organization;
copy.application = self.application;
copy.token = self.token;
copy.tokenExpirationDate = self.tokenExpirationDate;
return copy;
}
#pragma mark - Internal helpers -
- (NSString *) root
{
return [NSString stringWithFormat:@"%@/%@/%@", self.server, self.organization, self.application];
}
- (NSMutableURLRequest *) authorizedRequestWithMethod:(NSString *) method
path:(NSString *) path
body:(NSData *) body
{
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:path]];
[request setHTTPMethod:method];
if (body) {
[request setHTTPBody:body];
}
if (self.token) {
[request setValue:[NSString stringWithFormat:@"Bearer %@", self.token] forHTTPHeaderField:@"Authorization"];
}
return request;
}
#pragma mark - External helpers -
#pragma mark Queries
- (NSMutableDictionary *) queryWithString:(NSString *) queryString
limit:(int) limit
startUUID:(NSString *) startUUID
cursor:(NSString *) cursor
reversed:(BOOL) reversed
{
NSMutableDictionary *query = [NSMutableDictionary dictionary];
if (queryString) {
query[@"ql"] = queryString;
}
if (limit > 0) {
query[@"limit"] = [NSNumber numberWithInt:limit];
}
if (startUUID) {
query[@"start"] = startUUID;
}
if (cursor) {
query[@"cursor"] = cursor;
}
if (reversed) {
query[@"reversed"] = @"true";
}
return query;
}
#pragma mark Authentication
- (BOOL) authenticateWithResult:(UGHTTPResult *) result
{
id results = result.object;
self.token = results[@"access_token"];
id expires = results[@"expires_in"];
self.tokenExpirationDate = [NSDate dateWithTimeIntervalSinceNow:[expires intValue]];
return [self isAuthenticated];
}
- (BOOL) isAuthenticated
{
return (self.token &&
self.tokenExpirationDate &&
([self.tokenExpirationDate compare:[NSDate date]] == NSOrderedDescending));
}
#pragma mark - Management API request generators -
#pragma mark Access tokens
// http://apigee.com/docs/usergrid/content/accesstoken
- (NSMutableURLRequest *) getAccessTokenForAdminWithUsername:(NSString *) username
password:(NSString *) password
{
if (!username || !password) {
return nil;
}
NSDictionary *query = @{@"grant_type":@"password",
@"username":username,
@"password":password};
NSString *path = [NSMutableString stringWithFormat:@"%@/management/token?%@",
self.server, [query URLQueryString]];
return [self authorizedRequestWithMethod:@"GET"
path:path
body:nil];
}
- (NSMutableURLRequest *) getAccessTokenForOrganizationWithClientID:(NSString *) clientID
clientSecret:(NSString *) clientSecret
{
if (!clientID || !clientSecret) {
return nil;
}
NSDictionary *query = @{@"grant_type":@"client_credentials",
@"client_id":clientID,
@"client_secret":clientSecret};
NSString *path = [NSMutableString stringWithFormat:@"%@/management/token?%@",
self.server, [query URLQueryString]];
return [self authorizedRequestWithMethod:@"GET"
path:path
body:nil];
}
- (NSMutableURLRequest *) getAccessTokenForApplicationWithUsername:(NSString *) username
password:(NSString *) password
{
if (!username || !password) {
return nil;
}
NSDictionary *query = @{@"grant_type":@"password",
@"username":username,
@"password":password};
NSString *path = [NSMutableString stringWithFormat:@"%@/token?%@",
self.root, [query URLQueryString]];
return [self authorizedRequestWithMethod:@"GET"
path:path
body:nil];
}
- (NSMutableURLRequest *) getAccessTokenForApplicationWithClientID:(NSString *) clientID
clientSecret:(NSString *) clientSecret
{
if (!clientID || !clientSecret) {
return nil;
}
NSDictionary *query = @{@"grant_type":@"client_credentials",
@"client_id":clientID,
@"client_secret":clientSecret};
NSString *path = [NSMutableString stringWithFormat:@"%@/token?%@",
self.root, [query URLQueryString]];
return [self authorizedRequestWithMethod:@"GET"
path:path
body:nil];
}
#pragma mark Admin users
// http://apigee.com/docs/usergrid/content/admin-user
- (NSMutableURLRequest *) createAdminUserWithValues:(NSDictionary *) values
{
NSString *path = [NSString stringWithFormat:@"%@/management/users",
self.server];
return [self authorizedRequestWithMethod:@"POST"
path:path
body:[values URLQueryData]];
}
- (NSMutableURLRequest *) updateAdminUser:(NSString *) adminUserIdentifier
withValues:(NSDictionary *) values
{
NSString *path = [NSString stringWithFormat:@"%@/management/users/%@",
self.server, adminUserIdentifier];
return [self authorizedRequestWithMethod:@"PUT"
path:path
body:[values URLQueryData]];
}
- (NSMutableURLRequest *) getAdminUser:(NSString *) adminUserIdentifier
{
NSString *path = [NSString stringWithFormat:@"%@/management/users/%@",
self.server, adminUserIdentifier];
return [self authorizedRequestWithMethod:@"GET"
path:path
body:nil];
}
- (NSMutableURLRequest *) setPasswordForAdminUser:(NSString *) adminUserIdentifier
toValue:(NSString *) password
{
NSString *path = [NSString stringWithFormat:@"%@/management/users/%@/password",
self.server, adminUserIdentifier];
NSDictionary *values = @{@"password":password};
return [self authorizedRequestWithMethod:@"PUT"
path:path
body:[values URLQueryData]];
}
- (NSMutableURLRequest *) initiatePasswordResetForAdminUser
{
NSString *path = [NSString stringWithFormat:@"%@/management/users/resetpw",
self.server];
return [self authorizedRequestWithMethod:@"GET"
path:path
body:nil];
}
- (NSMutableURLRequest *) completePasswordResetForAdminUserWithValues:(NSDictionary *) values
{
NSString *path = [NSString stringWithFormat:@"%@/management/users/resetpw",
self.server];
return [self authorizedRequestWithMethod:@"POST"
path:path
body:[values URLQueryData]];
}
- (NSMutableURLRequest *) activateAdminUser:(NSString *) adminUserIdentifier
withToken:(NSString *) token
sendingConfirmationEmail:(BOOL) sendingConfirmationEmail
{
NSString *path = [NSString stringWithFormat:@"%@/management/users/%@/activate",
self.server, adminUserIdentifier];
NSDictionary *values = @{@"token":token,
@"confirm_email":boolean_representation(sendingConfirmationEmail)};
return [self authorizedRequestWithMethod:@"GET"
path:path
body:[values URLQueryData]];
}
- (NSMutableURLRequest *) reactivateAdminUser:(NSString *) adminUserIdentifier
{
NSString *path = [NSString stringWithFormat:@"%@/management/users/%@/reactivate",
self.server, adminUserIdentifier];
return [self authorizedRequestWithMethod:@"GET"
path:path
body:nil];
}
- (NSMutableURLRequest *) getActivityFeedForAdminUser:(NSString *) adminUserIdentifier
{
NSString *path = [NSString stringWithFormat:@"%@/management/users/%@/feed",
self.server, adminUserIdentifier];
return [self authorizedRequestWithMethod:@"GET"
path:path
body:nil];
}
#pragma mark Client authorization
// http://apigee.com/docs/usergrid/content/client-authorization
- (NSMutableURLRequest *) authorizeClient:(NSString *) clientIdentifier withResponseType:(NSString *) responseType
{
NSString *path = [NSString stringWithFormat:@"%@/management/authorize",
self.server];
NSDictionary *values = @{@"response_type":responseType,
@"client_id":clientIdentifier};
return [self authorizedRequestWithMethod:@"GET"
path:path
body:[values URLQueryData]];
}
#pragma mark Organizations and Applications
// http://apigee.com/docs/usergrid/content/organization
- (NSMutableURLRequest *) createOrganizationWithValues:(NSDictionary *) values
{
NSString *path = [NSString stringWithFormat:@"%@/management/organizations",
self.server];
return [self authorizedRequestWithMethod:@"POST"
path:path
body:[values URLQueryData]];
}
- (NSMutableURLRequest *) getOrganization:(NSString *) organizationIdentifier
{
NSString *path = [NSString stringWithFormat:@"%@/management/organizations/%@",
self.server, organizationIdentifier];
return [self authorizedRequestWithMethod:@"GET"
path:path
body:nil];
}
- (NSMutableURLRequest *) activateOrganization:(NSString *) organizationIdentifier
withToken:(NSString *) token
sendingConfirmationEmail:(BOOL) sendingConfirmationEmail
{
NSDictionary *values = @{@"token":token,
@"confirm_email":boolean_representation(sendingConfirmationEmail)};
NSString *path = [NSString stringWithFormat:@"%@/management/organizations/%@/activate?%@",
self.server, organizationIdentifier, [values URLQueryString]];
return [self authorizedRequestWithMethod:@"GET"
path:path
body:nil];
}
- (NSMutableURLRequest *) reactivateOrganization:(NSString *) organizationIdentifier
{
NSString *path = [NSString stringWithFormat:@"%@/management/organizations/%@/reactivate",
self.server, organizationIdentifier];
return [self authorizedRequestWithMethod:@"GET"
path:path
body:nil];
}
- (NSMutableURLRequest *) generateClientCredentialsForOrganization:(NSString *) organizationIdentifier
{
NSString *path = [NSString stringWithFormat:@"%@/management/organizations/%@/credentials",
self.server, organizationIdentifier];
return [self authorizedRequestWithMethod:@"POST"
path:path
body:nil];
}
- (NSMutableURLRequest *) getClientCredentialsForOrganization:(NSString *) organizationIdentifier
{
NSString *path = [NSString stringWithFormat:@"%@/management/organizations/%@/credentials",
self.server, organizationIdentifier];
return [self authorizedRequestWithMethod:@"GET"
path:path
body:nil];
}
- (NSMutableURLRequest *) getActivityFeedForOrganization:(NSString *) organizationIdentifier
{
NSString *path = [NSString stringWithFormat:@"%@/management/organizations/%@/feed",
self.server, organizationIdentifier];
return [self authorizedRequestWithMethod:@"GET"
path:path
body:nil];
}
- (NSMutableURLRequest *) createApplicationInOrganization:(NSString *)organizationIdentifier withValues:(NSDictionary *)values
{
NSString *path = [NSMutableString stringWithFormat:@"%@/management/organizations/%@/applications",
self.server, organizationIdentifier];
return [self authorizedRequestWithMethod:@"POST"
path:path
body:[values URLQueryData]];
}
- (NSMutableURLRequest *) deleteApplication:(NSString *) applicationIdentifier
inOrganization:(NSString *)organizationIdentifier
{
NSString *path = [NSMutableString stringWithFormat:@"%@/management/organizations/%@/applications/%@",
self.server, organizationIdentifier, applicationIdentifier];
return [self authorizedRequestWithMethod:@"DELETE"
path:path
body:nil];
}
- (NSMutableURLRequest *) generateClientCredentialsForApplication:(NSString *) applicationIdentifier
inOrganization:(NSString *) organizationIdentifier
{
NSString *path = [NSString stringWithFormat:@"%@/management/organizations/%@/applications/%@/credentials",
self.server, organizationIdentifier, applicationIdentifier];
return [self authorizedRequestWithMethod:@"POST"
path:path
body:nil];
}
- (NSMutableURLRequest *) getClientCredentialsForApplication:(NSString *) applicationIdentifier
inOrganization:(NSString *) organizationIdentifier
{
NSString *path = [NSString stringWithFormat:@"%@/management/organizations/%@/applications/%@/credentials",
self.server, organizationIdentifier, applicationIdentifier];
return [self authorizedRequestWithMethod:@"GET"
path:path
body:nil];
}
- (NSMutableURLRequest *) getApplicationsInOrganization:(NSString *) organizationIdentifier
{
NSString *path = [NSMutableString stringWithFormat:@"%@/management/organizations/%@/applications",
self.server, organizationIdentifier];
return [self authorizedRequestWithMethod:@"GET"
path:path
body:nil];
}
- (NSMutableURLRequest *) addAdminUser:(NSString *) adminUserIdentifier
toOrganization:(NSString *) organizationIdentifier
{
NSString *path = [NSString stringWithFormat:@"%@/management/organizations/%@/users/%@",
self.server, organizationIdentifier, adminUserIdentifier];
return [self authorizedRequestWithMethod:@"PUT"
path:path
body:nil];
}
- (NSMutableURLRequest *) getAdminUsersInOrganization:(NSString *) organizationIdentifier
{
NSString *path = [NSString stringWithFormat:@"%@/management/organizations/%@/users",
self.server, organizationIdentifier];
return [self authorizedRequestWithMethod:@"GET"
path:path
body:nil];
}
- (NSMutableURLRequest *) removeAdminUser:(NSString *) adminUserIdentifier
fromOrganization:(NSString *) organizationIdentifier
{
NSString *path = [NSString stringWithFormat:@"%@/management/organizations/%@/users/%@",
self.server, organizationIdentifier, adminUserIdentifier];
return [self authorizedRequestWithMethod:@"DELETE"
path:path
body:nil];
}
- (NSMutableURLRequest *) getApplication:(NSString *) applicationIdentifier
inOrganization:(NSString *) organizationIdentifier
{
NSString *path = [NSMutableString stringWithFormat:@"%@/%@/%@",
self.server, organizationIdentifier, applicationIdentifier];
return [self authorizedRequestWithMethod:@"GET"
path:path
body:nil];
}
#pragma mark - Application API request generators -
#pragma mark Activity
// http://apigee.com/docs/usergrid/content/activity
- (NSMutableURLRequest *) createActivityForUser:(NSString *) userIdentifier
withValues:(NSDictionary *) values
{
NSString *path = [NSMutableString stringWithFormat:@"%@/users/%@/activities",
self.root, userIdentifier];
return [self authorizedRequestWithMethod:@"POST"
path:path
body:[values URLQueryData]];
}
- (NSMutableURLRequest *) createActivityForGroup:(NSString *) groupIdentifier
withValues:(NSDictionary *) values
{
NSString *path = [NSMutableString stringWithFormat:@"%@/groups/%@/activities",
self.root, groupIdentifier];
return [self authorizedRequestWithMethod:@"POST"
path:path
body:[values URLQueryData]];
}
- (NSMutableURLRequest *) createActivityForFollowersOfUser:(NSString *) userIdentifier
inGroup:(NSString *) groupIdentifier
withValues:(NSDictionary *) values
{
NSString *path = [NSMutableString stringWithFormat:@"%@/groups/%@/users/%@/activities",
self.root, groupIdentifier, userIdentifier];
return [self authorizedRequestWithMethod:@"POST"
path:path
body:[values URLQueryData]];
}
- (NSMutableURLRequest *) getActivitiesForUser:(NSString *) userIdentifier
{
NSString *path = [NSMutableString stringWithFormat:@"%@/users/%@/activities",
self.root, userIdentifier];
return [self authorizedRequestWithMethod:@"GET"
path:path
body:nil];
}
- (NSMutableURLRequest *) getActivitiesForGroup:(NSString *) groupIdentifier
{
NSString *path = [NSMutableString stringWithFormat:@"%@/groups/%@/activities",
self.root, groupIdentifier];
return [self authorizedRequestWithMethod:@"GET"
path:path
body:nil];
}
- (NSMutableURLRequest *) getActivityFeedForUser:(NSString *) userIdentifier
{
NSString *path = [NSMutableString stringWithFormat:@"%@/users/%@/feed",
self.root, userIdentifier];
return [self authorizedRequestWithMethod:@"GET"
path:path
body:nil];
}
- (NSMutableURLRequest *) getActivityFeedForGroup:(NSString *) groupIdentifier
{
NSString *path = [NSMutableString stringWithFormat:@"%@/groups/%@/feed",
self.root, groupIdentifier];
return [self authorizedRequestWithMethod:@"GET"
path:path
body:nil];
}
#pragma mark Assets
- (NSMutableURLRequest *) getDataForAsset:(NSString *) assetIdentifier
{
NSString *path = [NSMutableString stringWithFormat:@"%@/assets/%@/data",
self.root, assetIdentifier];
NSMutableURLRequest *request = [self authorizedRequestWithMethod:@"GET"
path:path
body:nil];
return request;
}
- (NSMutableURLRequest *) postData:(NSData *) data
forAsset:(NSString *) assetIdentifier
{
NSString *path = [NSMutableString stringWithFormat:@"%@/assets/%@/data",
self.root,
assetIdentifier];
NSMutableURLRequest *request = [self authorizedRequestWithMethod:@"POST"
path:path
body:data];
[request setValue:@"application/octet-stream" forHTTPHeaderField:@"Content-Type"];
return request;
}
#pragma mark General-purpose endpoints
// http://apigee.com/docs/usergrid/content/general-purpose-endpoints
- (NSMutableURLRequest *) createEntityInCollection:(NSString *) collection
withValues:(NSDictionary *)values
{
NSString *path = [NSMutableString stringWithFormat:@"%@/%@",
self.root, collection];
NSError *error;
NSData *data = [NSJSONSerialization dataWithJSONObject:values options:0 error:&error];
if (!data) {
NSLog(@"%@", error);
}
return [self authorizedRequestWithMethod:@"POST"
path:path
body:data];
}
- (NSMutableURLRequest *) getEntity:(NSString *) entityIdentifier
inCollection:(NSString *) collection
{
NSString *path = [NSMutableString stringWithFormat:@"%@/%@/%@",
self.root, collection, entityIdentifier];
return [self authorizedRequestWithMethod:@"GET"
path:path
body:nil];
}
- (NSMutableURLRequest *) updateEntity:(NSString *) entityIdentifier
inCollection:(NSString *) collection
withValues:(NSDictionary *) values {
NSString *path = [NSString stringWithFormat:@"%@/%@/%@", self.root, collection, entityIdentifier];
NSError *error;
NSData *data = [NSJSONSerialization dataWithJSONObject:values options:0 error:&error];
if (!data) {
NSLog(@"%@", error);
}
return [self authorizedRequestWithMethod:@"PUT"
path:path
body:data];
}
- (NSMutableURLRequest *) deleteEntity:(NSString *) entityIdentifier
inCollection:(NSString *) collection
{
NSString *path = [NSString stringWithFormat:@"%@/%@/%@", self.root, collection, entityIdentifier];
return [self authorizedRequestWithMethod:@"DELETE"
path:path
body:nil];
}
- (NSMutableURLRequest *) getEntitiesInCollection:(NSString *) collection
limit:(int) limit
{
NSDictionary *query = [self queryWithString:@"select *"
limit:limit
startUUID:nil
cursor:nil
reversed:NO];
return [self getEntitiesInCollection:collection
usingQuery:query];
}
- (NSMutableURLRequest *) getEntitiesInCollection:(NSString *) collection
usingQuery:(NSDictionary *) query
{
NSString *path = [NSMutableString stringWithFormat:@"%@/%@?%@",
self.root,
collection,
[query URLQueryString]];
return [self authorizedRequestWithMethod:@"GET"
path:path
body:nil];
}
- (NSMutableURLRequest *) updateEntitiesInCollection:(NSString *) collection
usingQuery:(NSDictionary *) query
withValues:(NSDictionary *) values
{
NSString *path = [NSMutableString stringWithFormat:@"%@/%@?%@",
self.root,
collection,
[query URLQueryString]];
return [self authorizedRequestWithMethod:@"PUT"
path:path
body:[values URLQueryData]];
}
- (NSMutableURLRequest *) deleteEntitiesInCollection:(NSString *) collection
{
NSDictionary *query = [self queryWithString:@"select *"
limit:0
startUUID:nil
cursor:nil
reversed:NO];
return [self deleteEntitiesInCollection:collection
usingQuery:query];
}
- (NSMutableURLRequest *) deleteEntitiesInCollection:(NSString *) collection
usingQuery:(NSDictionary *) query
{
NSString *path = [NSString stringWithFormat:@"%@/%@?%@", self.root, collection, [query URLQueryString]];
return [self authorizedRequestWithMethod:@"DELETE"
path:path
body:nil];
}
#pragma mark Devices
// http://apigee.com/docs/usergrid/content/device
#pragma mark Events and Counters
// http://apigee.com/docs/usergrid/content/events-and-counters
- (NSMutableURLRequest *) createEventWithValues:(NSDictionary *) values
{
NSString *path = [NSString stringWithFormat:@"%@/events", self.root];
return [self authorizedRequestWithMethod:@"POST"
path:path
body:[values URLQueryData]];
}
#pragma mark Groups
// http://apigee.com/docs/usergrid/content/group
- (NSMutableURLRequest *) createGroupWithValues:(NSDictionary *) values
{
NSString *path = [NSString stringWithFormat:@"%@/groups", self.root];
return [self authorizedRequestWithMethod:@"POST"
path:path
body:[values URLQueryData]];
}
- (NSMutableURLRequest *) addUser:(NSString *) user
toGroup:(NSString *) group
{
NSString *path = [NSString stringWithFormat:@"%@/groups/%@/users/%@",
self.root, group, user];
return [self authorizedRequestWithMethod:@"POST"
path:path
body:nil];
}
- (NSMutableURLRequest *) getGroup:(NSString *) groupName
{
NSString *path = [NSString stringWithFormat:@"%@/groups/%@", self.root, groupName];
return [self authorizedRequestWithMethod:@"GET"
path:path
body:nil];
}
- (NSMutableURLRequest *) updateGroup:(NSString *) groupName
withValues:(NSDictionary *) values
{
NSString *path = [NSString stringWithFormat:@"%@/groups/%@",
self.root, groupName];
return [self authorizedRequestWithMethod:@"PUT"
path:path
body:[values URLQueryData]];
}
- (NSMutableURLRequest *) deleteUser:(NSString *) user
fromGroup:(NSString *) groupName
{
NSString *path = [NSString stringWithFormat:@"%@/groups/%@/users/%@",
self.root, groupName, user];
return [self authorizedRequestWithMethod:@"DELETE"
path:path
body:nil];
}
- (NSMutableURLRequest *) deleteGroup:(NSString *) groupName
{
NSString *path = [NSString stringWithFormat:@"%@/groups/%@",
self.root, groupName];
return [self authorizedRequestWithMethod:@"DELETE"
path:path
body:nil];
}
- (NSMutableURLRequest *) getUsersInGroup:(NSString *) groupName
{
NSString *path = [NSString stringWithFormat:@"%@/groups/%@/users",
self.root, groupName];
return [self authorizedRequestWithMethod:@"GET"
path:path
body:nil];
}
#pragma mark Roles
// http://apigee.com/docs/usergrid/content/role
- (NSMutableURLRequest *) createRoleWithValues:(NSDictionary *) values
{
NSString *path = [NSString stringWithFormat:@"%@/roles", self.root];
return [self authorizedRequestWithMethod:@"POST"
path:path
body:[values URLQueryData]];
}
- (NSMutableURLRequest *) getRoles
{
NSString *path = [NSString stringWithFormat:@"%@/roles", self.root];
return [self authorizedRequestWithMethod:@"GET"
path:path
body:nil];
}
- (NSMutableURLRequest *) deleteRole:(NSString *) roleName
{
NSString *path = [NSString stringWithFormat:@"%@/roles/%@",
self.root, roleName];
return [self authorizedRequestWithMethod:@"DELETE"
path:path
body:nil];
}
- (NSMutableURLRequest *) getPermissionsForRole:(NSString *) roleName
{
NSString *path = [NSString stringWithFormat:@"%@/roles/%@",
self.root, roleName];
return [self authorizedRequestWithMethod:@"GET"
path:path
body:nil];
}
- (NSMutableURLRequest *) addPermissionsToRole:(NSString *) roleName
withValues:(NSDictionary *) values
{
NSString *path = [NSString stringWithFormat:@"%@/roles/%@/permissions",
self.root, roleName];
return [self authorizedRequestWithMethod:@"POST"
path:path
body:[values URLQueryData]];
}
- (NSMutableURLRequest *) deletePermissionsFromRole:(NSString *) roleName
usingPattern:(NSString *) pattern
{
NSString *path = [NSString stringWithFormat:@"%@/roles/%@/permissions?pattern=%@",
self.root, roleName, pattern];
return [self authorizedRequestWithMethod:@"DELETE"
path:path
body:nil];
}
- (NSMutableURLRequest *) addUser:(NSString *)user
toRole:(NSString *)roleName
{
NSString *path = [NSString stringWithFormat:@"%@/roles/%@/users/%@",
self.root, roleName, user];
return [self authorizedRequestWithMethod:@"POST"
path:path
body:nil];
}
- (NSMutableURLRequest *) getUsersInRole:(NSString *) roleName
{
NSString *path = [NSString stringWithFormat:@"%@/roles/%@/users",
self.root, roleName];
return [self authorizedRequestWithMethod:@"GET"
path:path
body:nil];
}
- (NSMutableURLRequest *) deleteUser:(NSString *) user
fromRole:(NSString *) roleName
{
NSString *path = [NSString stringWithFormat:@"%@/roles/%@/users/%@",
self.root, roleName, user];
return [self authorizedRequestWithMethod:@"DELETE"
path:path
body:nil];
}
#pragma mark Users
// http://apigee.com/docs/usergrid/content/user
- (NSMutableURLRequest *) createUserWithValues:(NSDictionary *) values
{
NSString *path = [NSString stringWithFormat:@"%@/users", self.root];
return [self authorizedRequestWithMethod:@"GET"
path:path
body:[values URLQueryData]];
}
- (NSMutableURLRequest *) setPasswordForUser:(NSString *) username
toPassword:(NSString *) newPassword
fromPassword:(NSString *) oldPassword
{
NSDictionary *query = @{@"newpassword":newPassword,
@"oldpassword":oldPassword};
NSString *path = [NSString stringWithFormat:@"%@/users/%@/password",
self.root, username];
return [self authorizedRequestWithMethod:@"POST"
path:path
body:[query URLQueryData]];
}
- (NSMutableURLRequest *) getUser:(NSString *) username
{
NSString *path = [NSString stringWithFormat:@"%@/users/%@",
self.root, username];
return [self authorizedRequestWithMethod:@"GET"
path:path
body:nil];
}
- (NSMutableURLRequest *) updateUser:(NSString *) username
withValues:(NSDictionary *) values
{
NSString *path = [NSString stringWithFormat:@"%@/users/%@",
self.root, username];
return [self authorizedRequestWithMethod:@"PUT"
path:path
body:[values URLQueryData]];
}
- (NSMutableURLRequest *) deleteUser:(NSString *) username
{
NSString *path = [NSString stringWithFormat:@"%@/users/%@",
self.root, username];
return [self authorizedRequestWithMethod:@"DELETE"
path:path
body:nil];
}
- (NSMutableURLRequest *) getUsersUsingQuery:(NSDictionary *) query
{
NSString *path = [NSString stringWithFormat:@"%@/users?%@",
self.root, [query URLQueryString]];
return [self authorizedRequestWithMethod:@"GET"
path:path
body:nil];
}
- (NSMutableURLRequest *) connectEntity:(NSString *) entity1
inCollection:(NSString *) collection
toEntity:(NSString *) entity2
throughRelationship:(NSString *) relationship
{
NSString *path = [NSString stringWithFormat:@"%@/%@/%@/%@/%@",
self.root, collection, entity1, relationship, entity2];
return [self authorizedRequestWithMethod:@"POST"
path:path
body:nil];
}
- (NSMutableURLRequest *) disconnectEntity:(NSString *) entity1
inCollection:(NSString *) collection
fromEntity:(NSString *) entity2
throughRelationship:(NSString *) relationship
{
NSString *path = [NSString stringWithFormat:@"%@/%@/%@/%@/%@",
self.root, collection, entity1, relationship, entity2];
return [self authorizedRequestWithMethod:@"DELETE"
path:path
body:nil];
}
- (NSMutableURLRequest *) getConnectionsToEntity:(NSString *) entity
inCollection:(NSString *) collection
throughRelationship:(NSString *) relationship
usingQuery:(NSDictionary *) query
{
NSString *path = [NSString stringWithFormat:@"%@/%@/%@/%@?%@",
self.root, collection, entity, relationship, [query URLQueryString]];
return [self authorizedRequestWithMethod:@"GET"
path:path
body:nil];
}
@end