diff --git a/http-service/src/main/java/net/runelite/http/service/xtea/XteaController.java b/http-service/src/main/java/net/runelite/http/service/xtea/XteaController.java new file mode 100644 index 0000000000..5f06429a80 --- /dev/null +++ b/http-service/src/main/java/net/runelite/http/service/xtea/XteaController.java @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2018, Adam + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package net.runelite.http.service.xtea; + +import java.util.List; +import java.util.stream.Collectors; +import net.runelite.http.api.xtea.XteaKey; +import net.runelite.http.api.xtea.XteaRequest; +import net.runelite.http.service.util.exception.NotFoundException; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import static org.springframework.web.bind.annotation.RequestMethod.POST; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/xtea") +public class XteaController +{ + @Autowired + private XteaService xteaService; + + @RequestMapping(method = POST) + public void submit(@RequestBody XteaRequest xteaRequest) + { + xteaService.submit(xteaRequest); + } + + @RequestMapping + public List get() + { + return xteaService.get().stream() + .map(XteaController::entryToKey) + .collect(Collectors.toList()); + } + + @RequestMapping("/{region}") + public XteaKey getRegion(@PathVariable int region) + { + XteaEntry xteaRegion = xteaService.getRegion(region); + if (xteaRegion == null) + { + throw new NotFoundException(); + } + + return entryToKey(xteaRegion); + } + + private static XteaKey entryToKey(XteaEntry xe) + { + XteaKey xteaKey = new XteaKey(); + xteaKey.setRegion(xe.getRegion()); + xteaKey.setKeys(new int[] + { + xe.getKey1(), + xe.getKey2(), + xe.getKey3(), + xe.getKey4() + }); + return xteaKey; + } +} diff --git a/http-service/src/main/java/net/runelite/http/service/xtea/XteaService.java b/http-service/src/main/java/net/runelite/http/service/xtea/XteaService.java index b74c146dee..92ec5a6dd8 100644 --- a/http-service/src/main/java/net/runelite/http/service/xtea/XteaService.java +++ b/http-service/src/main/java/net/runelite/http/service/xtea/XteaService.java @@ -28,7 +28,6 @@ import com.google.common.cache.Cache; import com.google.common.cache.CacheBuilder; import java.io.IOException; import java.util.List; -import java.util.stream.Collectors; import net.runelite.cache.IndexType; import net.runelite.cache.fs.Container; import net.runelite.cache.util.Djb2; @@ -38,26 +37,16 @@ import net.runelite.http.service.cache.CacheService; import net.runelite.http.service.cache.beans.ArchiveEntry; import net.runelite.http.service.cache.beans.CacheEntry; import net.runelite.http.service.util.exception.InternalServerErrorException; -import net.runelite.http.service.util.exception.NotFoundException; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import static org.springframework.web.bind.annotation.RequestMethod.POST; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.stereotype.Service; import org.sql2o.Connection; import org.sql2o.Query; import org.sql2o.Sql2o; -@RestController -@RequestMapping("/xtea") +@Service public class XteaService { - private static final Logger logger = LoggerFactory.getLogger(XteaService.class); - private static final String CREATE_SQL = "CREATE TABLE IF NOT EXISTS `xtea` (\n" + " `id` int(11) NOT NULL AUTO_INCREMENT,\n" + " `region` int(11) NOT NULL,\n" @@ -104,8 +93,7 @@ public class XteaService .executeAndFetchFirst(XteaEntry.class); } - @RequestMapping(method = POST) - public void submit(@RequestBody XteaRequest xteaRequest) + public void submit(XteaRequest xteaRequest) { boolean cached = true; for (XteaKey key : xteaRequest.getKeys()) @@ -191,42 +179,27 @@ public class XteaService } } - @RequestMapping - public List get() + public List get() { try (Connection con = sql2o.open()) { - List entries = con.createQuery( + return con.createQuery( "select t1.region, t1.time, t2.rev, t2.key1, t2.key2, t2.key3, t2.key4 from " + "(select region,max(time) as time from xtea group by region) t1 " + "join xtea t2 on t1.region = t2.region and t1.time = t2.time") .executeAndFetch(XteaEntry.class); - - return entries.stream() - .map(XteaService::entryToKey) - .collect(Collectors.toList()); } } - @RequestMapping("/{region}") - public XteaKey getRegion(@PathVariable int region) + public XteaEntry getRegion(int region) { - XteaEntry entry; - try (Connection con = sql2o.open()) { - entry = con.createQuery("select region, time, rev, key1, key2, key3, key4 from xtea " + return con.createQuery("select region, time, rev, key1, key2, key3, key4 from xtea " + "where region = :region order by time desc limit 1") .addParameter("region", region) .executeAndFetchFirst(XteaEntry.class); } - - if (entry == null) - { - throw new NotFoundException(); - } - - return entryToKey(entry); } private boolean checkKeys(CacheEntry cache, int regionId, int[] keys) @@ -264,18 +237,4 @@ public class XteaService return false; } } - - private static XteaKey entryToKey(XteaEntry xe) - { - XteaKey xteaKey = new XteaKey(); - xteaKey.setRegion(xe.getRegion()); - xteaKey.setKeys(new int[] - { - xe.getKey1(), - xe.getKey2(), - xe.getKey3(), - xe.getKey4() - }); - return xteaKey; - } }