Serving a payment option for my minecraft server so I don't have to pay for it all alone
選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

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