Guest User

Untitled

a guest
Jun 14th, 2018
175
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.25 KB | None | 0 0
  1. #import <Nunja/Nunja.h>
  2. #import "NuMongoDB.h"
  3. #import "JSON.h"
  4.  
  5. @interface ServerDelegate : NunjaDefaultDelegate
  6. {
  7. }
  8. @end
  9.  
  10. @implementation ServerDelegate
  11.  
  12. - (void) applicationDidFinishLaunching {
  13.  
  14. [self addHandlerWithHTTPMethod:@"POST"
  15. path:@"/reset"
  16. block:^(NunjaRequest *REQUEST) {
  17. NuMongoDB *mongo = [NuMongoDB new];
  18. [mongo connectWithOptions:nil];
  19. [mongo authenticateUser:@"stickup"
  20. withPassword:@"stickup"
  21. forDatabase:@"stickup"];
  22. [mongo dropCollection:@"users" inDatabase:@"stickup"];
  23. [mongo dropCollection:@"stickups" inDatabase:@"stickup"];
  24. id result = [NSDictionary dictionaryWithObjectsAndKeys:
  25. [NSNumber numberWithInt:200], @"status",
  26. @"Reset database.", @"message",
  27. nil];
  28. [mongo close];
  29. return [result JSONRepresentation];
  30. }];
  31.  
  32. [self addHandlerWithHTTPMethod:@"POST"
  33. path:@"/stickup"
  34. block:^(NunjaRequest *REQUEST) {
  35. NuMongoDB *mongo = [NuMongoDB new];
  36. [mongo connectWithOptions:nil];
  37. [mongo authenticateUser:@"stickup"
  38. withPassword:@"stickup"
  39. forDatabase:@"stickup"];
  40. id stickup = [REQUEST post];
  41. id user = [mongo findOne:[NSDictionary dictionaryWithObjectsAndKeys:
  42. [stickup objectForKey:@"user"], @"name",
  43. nil]
  44. inCollection:@"stickup.users"];
  45. if (!user) {
  46. user = [NSDictionary dictionaryWithObjectsAndKeys:
  47. [stickup objectForKey:@"user"], @"name",
  48. [stickup objectForKey:@"user"], @"password",
  49. nil];
  50. [mongo insertObject:user intoCollection:@"stickup.users"];
  51. }
  52. id result;
  53. if ([[user objectForKey:@"password"] isEqualToString:
  54. [stickup objectForKey:@"password"]]) {
  55. [stickup removeObjectForKey:@"password"];
  56. [stickup setObject:[NSDate date] forKey:@"time"];
  57. NSNumber *latitude = [NSNumber numberWithFloat:
  58. [[stickup objectForKey:@"latitude"] floatValue]];
  59. NSNumber *longitude = [NSNumber numberWithFloat:
  60. [[stickup objectForKey:@"longitude"] floatValue]];
  61.  
  62. [stickup setObject:[NSDictionary dictionaryWithObjectsAndKeys:
  63. latitude, @"latitude",
  64. longitude, @"longitude",
  65. nil]
  66. forKey:@"location"];
  67. [stickup removeObjectForKey:@"latitude"];
  68. [stickup removeObjectForKey:@"longitude"];
  69. [mongo insertObject:stickup intoCollection:@"stickup.stickups"];
  70. result = [NSDictionary dictionaryWithObjectsAndKeys:
  71. [NSNumber numberWithInt:200], @"status",
  72. @"Thank you.", @"message",
  73. stickup, @"saved",
  74. nil];
  75. } else {
  76. result = [NSDictionary dictionaryWithObjectsAndKeys:
  77. [NSNumber numberWithInt:403], @"status",
  78. @"Unable to post stickup.", @"message",
  79. nil];
  80. }
  81. [mongo close];
  82. return [result JSONRepresentation];
  83. }];
  84.  
  85. [self addHandlerWithHTTPMethod:@"GET"
  86. path:@"/count"
  87. block:^(NunjaRequest *REQUEST) {
  88. NuMongoDB *mongo = [NuMongoDB new];
  89. [mongo connectWithOptions:nil];
  90. [mongo authenticateUser:@"stickup"
  91. withPassword:@"stickup"
  92. forDatabase:@"stickup"];
  93. int count = [mongo countWithCondition:nil inCollection:@"stickups" inDatabase:@"stickup"];
  94. id result = [NSDictionary dictionaryWithObjectsAndKeys:
  95. [NSNumber numberWithInt:count], @"count",
  96. [NSNumber numberWithInt:200], @"status",
  97. nil];
  98. [mongo close];
  99. return [result JSONRepresentation];
  100. }];
  101.  
  102. [self addHandlerWithHTTPMethod:@"GET"
  103. path:@"/stickups"
  104. block:^(NunjaRequest *REQUEST) {
  105. NuMongoDB *mongo = [NuMongoDB new];
  106. [mongo connectWithOptions:nil];
  107. [mongo authenticateUser:@"stickup"
  108. withPassword:@"stickup"
  109. forDatabase:@"stickup"];
  110. [mongo ensureCollection:@"stickup.stickups"
  111. hasIndex:[NSDictionary dictionaryWithObjectsAndKeys:
  112. @"2d", @"location",
  113. nil]
  114. withOptions:0];
  115. NSMutableDictionary *query = [NSMutableDictionary dictionary];
  116. NSNumber *latitude = [NSNumber numberWithFloat:
  117. [[[REQUEST query] objectForKey:@"latitude"] floatValue]];
  118. NSNumber *longitude = [NSNumber numberWithFloat:
  119. [[[REQUEST query] objectForKey:@"longitude"] floatValue]];
  120. [query setObject:[NSDictionary dictionaryWithObjectsAndKeys:
  121. [NSDictionary dictionaryWithObjectsAndKeys:
  122. latitude, @"latitude",
  123. longitude, @"longitude",
  124. nil],
  125. @"$near",
  126. nil]
  127. forKey:@"location"];
  128. int count = [[[REQUEST query] objectForKey:@"count"] intValue];
  129. if (count == 0) {
  130. count = 10;
  131. }
  132. id stickups = [mongo findArray:query inCollection:@"stickup.stickups"
  133. returningFields:nil numberToReturn:count numberToSkip:0];
  134. id result = [NSDictionary dictionaryWithObjectsAndKeys:
  135. [NSNumber numberWithInt:200], @"status",
  136. stickups, @"stickups",
  137. nil];
  138. [mongo close];
  139. return [result JSONRepresentation];
  140. }];
  141.  
  142. }
  143. @end
  144.  
  145. int main (int argc, const char * argv[])
  146. {
  147. return NunjaMain(argc, argv, @"ServerDelegate");
  148. }
Add Comment
Please, Sign In to add comment