Serving a payment option for my minecraft server so I don't have to pay for it all alone
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

MinecraftPayAPI.class.php 11KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351
  1. <?php
  2. class MinecraftPayAPI {
  3. /**
  4. * @API-Callback
  5. * @Path servers
  6. *
  7. * @Request-Method GET
  8. *
  9. * @return MinecraftServer[]
  10. */
  11. public function GetAllServers() {
  12. return MinecraftServer::GetAll()->toArray();
  13. }
  14. /**
  15. * @API-Callback
  16. * @Path servers/:id
  17. * @Require-Login
  18. * @Require-Permission Minecraft-Pay-Settings
  19. *
  20. * @Request-Method PATCH
  21. *
  22. * @Parameterized
  23. *
  24. * @param MinecraftServer $server server to edit
  25. *
  26. * @paramget id path id required int
  27. * @paramget server post server required MinecraftServer
  28. *
  29. * @return APIResult< MinecraftServer >
  30. */
  31. public static function UpdateServer( int $id, MinecraftServer $server ) {
  32. $o = MinecraftServer::GetByID( $id );
  33. if ( $o == null ) {
  34. $results[] = new APIResult( 'Missing ID', false, $server );
  35. }
  36. if ( $server->GetName() != null ) $o->SetName( $server->GetName() );
  37. if ( $server->GetDomain() != null ) $o->SetDomain( $server->GetDomain() );
  38. if ( $server->GetPort() != null ) $o->SetPort( $server->GetPort() );
  39. if ( $server->GetPassword() != null ) $o->SetPassword( $server->GetPassword() );
  40. if ( $server->GetServerPath() != null ) $o->SetServerPath( $server->GetServerPath() );
  41. if ( $server->GetPerMonthPrice() != null ) $o->SetPerMonthPrice( $server->GetPerMonthPrice() );
  42. if ( $server->GetMaxPerMonthPrice() != null ) $o->SetMaxPerMonthPrice( $server->GetMaxPerMonthPrice() );
  43. $r = $o->Save();
  44. return new APIResult( $r ? 'Saved successfully' : 'Saving failed', $r, $r ? $o : MinecraftServer::GetByID( $id ) );
  45. }
  46. /**
  47. * @API-Callback
  48. * @Path servers/:id
  49. * @Require-Login
  50. * @Require-Permission Minecraft-Pay-Settings
  51. *
  52. * @Request-Method DELETE
  53. *
  54. * @Parameterized
  55. *
  56. * @paramget id path id required int
  57. *
  58. * @return APIResult< MinecraftServer >
  59. */
  60. public static function DeleteServer( int $id ) {
  61. if ( !is_numeric( $id ) ) return new APIResult( 'Invalid ID', false, null );
  62. $server = MinecraftServer::GetByID( $id );
  63. $result = null;
  64. if ( !$server ) {
  65. $result = new APIResult( 'Server does not exist', false, null );
  66. } else if ( $server->DELETE() ) {
  67. $result = new APIResult( 'Deleted server successfully', true, null );
  68. } else {
  69. $result = new APIResult( 'Deleting server failed', false, $server );
  70. }
  71. return $result;
  72. }
  73. /**
  74. * @API-Callback
  75. * @Path servers
  76. * @Require-Login
  77. * @Require-Permission Minecraft-Pay-Settings
  78. *
  79. * @Request-Method POST
  80. *
  81. * @Parameterized
  82. *
  83. * @param MinecraftServer $server to add
  84. *
  85. * @paramget server post server required MinecraftServer
  86. *
  87. * @return APIResult< MinecraftServer >
  88. */
  89. public static function AddServer( MinecraftServer $server ) {
  90. $o = new MinecraftServer();
  91. $o->SetName( $server->GetName() );
  92. $s = $o->Save();
  93. return new APIResult( $s ? 'Created server successfully' : 'The server could not be created', $s, $s ? $o : null );
  94. }
  95. /**
  96. * @API-Callback
  97. * @Path users
  98. * @Require-Login
  99. * @Require-Permission Minecraft-Possess-User
  100. *
  101. * @Request-Method GET
  102. *
  103. * @return MinecraftUser[]
  104. */
  105. public function GetAllUsers() {
  106. return MinecraftUser::GetAll( [ 'OwnerID' => API::$User->GetID() ] )->toArray();
  107. }
  108. /**
  109. * @API-Callback
  110. * @Path users/:id/subscription-states
  111. * @Require-Login
  112. * @Require-Permission Minecraft-Possess-User
  113. *
  114. * @Request-Method GET
  115. *
  116. * @Parameterized
  117. *
  118. * @paramget id path id required int
  119. *
  120. * @return Map< int, boolean >
  121. */
  122. public function GetAllSubscriptionStates( int $id ) {
  123. $user = MinecraftUser::GetByID( $id );
  124. $data = [];
  125. foreach( MinecraftServer::GetAll() as $server ) {
  126. $data[] = [ $server->GetID() , $server->IsUnlocked( $user ) ];
  127. }
  128. return $data;
  129. }
  130. /**
  131. * @API-Callback
  132. * @Path users/:id/subscribe-server/:serverId
  133. * @Require-Login
  134. * @Require-Permission Minecraft-Possess-User
  135. *
  136. * @Request-Method GET
  137. *
  138. * @Parameterized
  139. *
  140. * @paramget id path id required int
  141. * @paramget serverId path serverId required int
  142. *
  143. * @return APIResult< boolean >
  144. */
  145. public function SubscribeServer( int $id, int $serverId ) {
  146. $u = MinecraftUser::GetByID( $id );
  147. $s = MinecraftServer::GetByID( $serverId );
  148. $result = new APIResult( '', false, false );
  149. if ( is_null( $s ) ) {
  150. $result->Message( 'Unknown server' );
  151. }
  152. else if ( is_null( $u ) ) {
  153. $result->Message( 'Unknown user' );
  154. }
  155. else {
  156. if ( $s->Unlock( $u ) ) {
  157. if ( !$u->HasSubscripted( $s ) ) {
  158. $ms = new MinecraftServerSubscription();
  159. $ms->SetConcerningServer( $s );
  160. $ms->SetUnlockedUser( $u );
  161. $result->Success( $ms->Save() );
  162. $result->Message( $result->Success() ? 'Unlock successful' : 'Unlock failed' )->Obj( $result->Success() );
  163. if ( !$result->Success() ) $s->Lock( $u );
  164. } else {
  165. $result->Message( 'Unlock successful' )->Success( true )->Obj( true );
  166. }
  167. } else {
  168. $result->Message( 'Unlock failed' )->Success( false );
  169. }
  170. }
  171. return $result;
  172. }
  173. // /**
  174. // * @API-Callback
  175. // * @Path users/:id
  176. // * @Require-Login
  177. // * @Require-Permission Minecraft-Possess-User
  178. // *
  179. // * @Request-Method PATCH
  180. // *
  181. // * @Parameterized
  182. // *
  183. // * @param MinecraftUser $user user to edit
  184. // *
  185. // * @paramget id path id required int
  186. // * @paramget user post user required MinecraftUser
  187. // *
  188. // * @return APIResult< MinecraftUser >
  189. // */
  190. // public static function UpdateUser( int $id, MinecraftUser $user ) {
  191. // $o = MinecraftUser::GetByID( $id );
  192. // if ( $o == null ) {
  193. // $results[] = new APIResult( 'Missing ID', false, $user );
  194. // }
  195. // if ( $user->GetUsername() != null ) $o->SetUsername( $user->GetUsername() );
  196. // if ( API::$User->GetID() != $user->GetOwner()->GetID() ) {
  197. // return new APIResult( 'This minecraft user does not belong to you', false, null );
  198. // }
  199. // $r = $o->Save();
  200. // return new APIResult( $r ? 'Saved successfully' : 'Saving failed', $r, $r ? $o : MinecraftUser::GetByID( $id ) );
  201. // }
  202. /**
  203. * @API-Callback
  204. * @Path users/:id
  205. * @Require-Login
  206. * @Require-Permission Minecraft-Possess-User
  207. *
  208. * @Request-Method DELETE
  209. *
  210. * @Parameterized
  211. *
  212. * @paramget id path id required int
  213. *
  214. * @return APIResult< MinecraftUser >
  215. */
  216. public static function DeleteUser( int $id ) {
  217. if ( !is_numeric( $id ) ) return new APIResult( 'Invalid ID', false, null );
  218. $user = MinecraftUser::GetByID( $id );
  219. $result = null;
  220. if ( !$user ) {
  221. $result = new APIResult( 'User does not exist', false, null );
  222. } else if ( $user->DELETE() ) {
  223. $result = new APIResult( 'Deleted user successfully', true, null );
  224. } else {
  225. $result = new APIResult( 'Deleting user failed', false, $user );
  226. }
  227. return $result;
  228. }
  229. /**
  230. * @API-Callback
  231. * @Path users
  232. * @Require-Login
  233. * @Require-Permission Minecraft-Possess-User
  234. *
  235. * @Request-Method POST
  236. *
  237. * @Parameterized
  238. *
  239. * @param MinecraftUser $user to add
  240. *
  241. * @paramget user post user required MinecraftUser
  242. *
  243. * @return APIResult< MinecraftUser >
  244. */
  245. public static function AddUser( MinecraftUser $user ) {
  246. $o = new MinecraftUser();
  247. $o->SetUsername( $user->GetUsername() );
  248. $o->SetOwner( API::$User );
  249. $s = $o->Save();
  250. return new APIResult( $s ? 'Created user successfully' : 'The user could not be created', $s, $s ? $o : null );
  251. }
  252. /**
  253. * @API-Callback
  254. * @Path charges
  255. * @Require-Login
  256. * @Require-Permission Minecraft-Possess-User
  257. *
  258. * @Request-Method GET
  259. *
  260. * @return MinecraftUserAccount[]
  261. */
  262. public function GetAllCharges() {
  263. return MinecraftUserAccount::GetAll( [ 'DebtorID' => API::$User->GetID() ] )->toArray();
  264. }
  265. /**
  266. * @API-Callback
  267. * @Path users/:id/grant-user-right
  268. * @Require-Login
  269. * @Require-Permission Minecraft-Pay-Settings
  270. *
  271. * @Request-Method POST
  272. *
  273. * @Parameterized
  274. *
  275. * @paramget id path id required int
  276. *
  277. * @return APIResult< boolean >
  278. */
  279. public function GrantUserRight( int $id ) {
  280. $u = User::GetByID( $id );
  281. $r = new APIResult( '', false, false );
  282. $s = false;
  283. if ( !is_null( $u ) ) {
  284. $p = Permission::SEARCH( 'Minecraft-Possess-User' );
  285. $s = $p->grant_user( $u->GetID(), true );
  286. $r->Message( 'Right granted successfully' )->Success( true )->Obj( true );
  287. }
  288. else $r->Message( 'Could not find user' );
  289. return $r;
  290. }
  291. /**
  292. * @API-Callback
  293. * @Path users/:id/acredit
  294. * @Require-Login
  295. * @Require-Permission Minecraft-Pay-Settings
  296. *
  297. * @Request-Method POST
  298. *
  299. * @Parameterized
  300. *
  301. * @paramget id path id required int
  302. * @paramget credit post credit required MinecraftUserAccount
  303. *
  304. * @return APIResult< MinecraftUserAccount >
  305. */
  306. public function Acredit( int $id, MinecraftUserAccount $credit ) {
  307. $r = new APIResult( '', false, null );
  308. $ac = new MinecraftUserAccount();
  309. $u = User::GetByID( $id );
  310. if ( is_null( $u ) ) {
  311. $r->Message( 'Missing user' );
  312. } else {
  313. $ac->SetMod( $credit->GetMod() );
  314. $ac->SetComment( $credit->GetComment() );
  315. $ac->SetDebtor( $u );
  316. $r->Success( !!$ac->Save() );
  317. $r->Message( $r->Success() ? 'Credit successful' : 'Credit failed' );
  318. if ( $r->Success() ) $r->Obj( $ac );
  319. }
  320. return $r;
  321. }
  322. }