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

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