Serving a payment option for my minecraft server so I don't have to pay for it all alone
Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

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. }