private Optional<SkinModel> parseSkinTexture(Reader reader) { TexturesModel texturesModel = gson.fromJson(reader, TexturesModel.class); SkinProperty[] properties = texturesModel.getProperties(); if (properties != null && properties.length > 0) { SkinProperty propertiesModel = properties[0]; //base64 encoded skin data String encodedSkin = propertiesModel.getValue(); String signature = propertiesModel.getSignature(); return Optional.of(SkinModel.createSkinFromEncoded(encodedSkin, signature)); } return Optional.empty(); } }
public Lock getSaveLock() { return getLazyLock().writeLock(); }
private WrappedSignedProperty convertToProperty(SkinModel skinData) { String encodedValue = skinData.getEncodedValue(); String signature = skinData.getSignature(); return WrappedSignedProperty.fromValues(SkinProperty.SKIN_KEY, encodedValue, signature); } }
@Override public void writeTo(ByteArrayDataOutput out) { out.writeBoolean(allowed); out.writeInt(skin.getRowId()); out.writeUTF(skin.getEncodedValue()); out.writeUTF(skin.getSignature()); out.writeUTF(receiverUUID.toString()); }
public SkinModel checkAutoUpdate(SkinModel oldSkin) { if (oldSkin == null) { return null; } if (oldSkin.isOutdated(autoUpdateDiff)) { Optional<SkinModel> updatedSkin = skinApi.downloadSkin(oldSkin.getProfileId()); if (updatedSkin.isPresent() && !Objects.equals(updatedSkin.get(), oldSkin)) { return updatedSkin.get(); } } return oldSkin; }
private void checkPermissions(Player player, CheckPermMessage permMessage) { UUID receiverUUID = permMessage.getReceiverUUD(); boolean op = permMessage.isOp(); SkinModel targetSkin = permMessage.getTargetSkin(); UUID skinProfile = targetSkin.getProfileId(); boolean success = op || checkBungeePerms(player, receiverUUID, permMessage.isSkinPerm(), skinProfile); sendResultMessage(player, new PermResultMessage(success, targetSkin, receiverUUID)); }
@Override public void readFrom(ByteArrayDataInput in) { allowed = in.readBoolean(); int rowId = in.readInt(); String encodedValue = in.readUTF(); String encodedSignature = in.readUTF(); skin = SkinModel.createSkinFromEncoded(encodedValue, encodedSignature); skin.setRowId(rowId); receiverUUID = UUID.fromString(in.readUTF()); }
public SkinModel(int rowId, long timestamp, UUID uuid, String name , boolean slimModel, String skinURL, String capeURL, byte[] signature) { this.rowId = rowId; this.timestamp = timestamp; this.profileId = uuid; this.profileName = name; if (skinURL != null && !skinURL.isEmpty()) { textures.put(TextureType.SKIN, new TextureModel(skinURL, slimModel)); } if (capeURL != null && !capeURL.isEmpty()) { textures.put(TextureType.CAPE, new TextureModel(capeURL)); } this.encodedSignature = Base64.getEncoder().encodeToString(signature); this.encodedValue = serializeData(); }
@Override public JsonElement serialize(TextureModel src, Type typeOfSrc, JsonSerializationContext context) { JsonObject skin = new JsonObject(); if (src.isSlim()) { JsonObject metadata = new JsonObject(); metadata.add("model", new JsonPrimitive("slim")); skin.add("metadata", metadata); } skin.addProperty("url", src.getUrl()); return skin; } }
@Override public void run() { GameProfile profile = owner.getProfile(); UUID id = profile.getId(); String oldSkinUrl = core.getSkinApi().downloadSkin(id) .map(skinModel -> skinModel.getTextures().get(TextureType.SKIN).getUrl()) .orElse(""); sendMessageInvoker("skin-change-queued"); scheduleChangeTask(oldSkinUrl); }
private SkinModel parseSkinData(ResultSet resultSet) throws SQLException { int skinId = resultSet.getInt(1); long timestamp = resultSet.getLong(2); UUID uuid = UUIDTypeAdapter.parseId(resultSet.getString(3)); String name = resultSet.getString(4); boolean slimModel = resultSet.getBoolean(5); String skinUrl = resultSet.getString(6); String capeUrl = resultSet.getString(7); byte[] signature = resultSet.getBytes(8); return new SkinModel(skinId, timestamp, uuid, name, slimModel, skinUrl, capeUrl, signature); } }
public static SkinModel createSkinFromEncoded(String encodedData, String signature) { byte[] data = Base64.getDecoder().decode(encodedData); String rawJson = new String(data, StandardCharsets.UTF_8); SkinModel skinModel = gson.fromJson(rawJson, SkinModel.class); skinModel.setRowId(-1); skinModel.encodedSignature = signature; skinModel.encodedValue = encodedData; return skinModel; }
private Property[] toProperties(SkinModel targetSkin) { if (targetSkin == null) { return emptyProperties; } String encodedValue = targetSkin.getEncodedValue(); String signature = targetSkin.getSignature(); Property prop = new Property(SkinProperty.SKIN_KEY, encodedValue, signature); return new Property[]{prop}; } }
@Override public void writeTo(ByteArrayDataOutput out) { out.writeInt(targetSkin.getRowId()); out.writeUTF(targetSkin.getEncodedValue()); out.writeUTF(targetSkin.getSignature()); out.writeUTF(receiverUUD.toString()); out.writeBoolean(skinPerm); out.writeBoolean(isOp); }
@Override public void onPluginMessageReceived(String channel, Player player, byte[] data) { ByteArrayDataInput dataInput = ByteStreams.newDataInput(data); CheckPermMessage message = new CheckPermMessage(); message.readFrom(dataInput); UUID receiverUUID = message.getReceiverUUD(); boolean op = message.isOp(); SkinModel targetSkin = message.getTargetSkin(); UUID skinProfile = targetSkin.getProfileId(); boolean success = op || checkBungeePerms(player, receiverUUID, message.isSkinPerm(), skinProfile); plugin.sendPluginMessage(player, new PermResultMessage(success, targetSkin, receiverUUID)); }
@Override public void readFrom(ByteArrayDataInput in) { int rowId = in.readInt(); String encodedData = in.readUTF(); String encodedSignature = in.readUTF(); targetSkin = SkinModel.createSkinFromEncoded(encodedData, encodedSignature); targetSkin.setRowId(rowId); //continue on success only receiverUUD = UUID.fromString(in.readUTF()); skinPerm = in.readBoolean(); isOp = in.readBoolean(); }
public int getRowId() { getLazyLock().readLock().lock(); try { return rowId; } finally { getLazyLock().readLock().unlock(); } }
@Override public void applyProperties(GameProfile profile, SkinModel targetSkin) { //remove existing skins profile.getPropertyMap().clear(); if (targetSkin != null) { GameProfileManager profileManager = Sponge.getServer().getGameProfileManager(); ProfileProperty profileProperty = profileManager.createProfileProperty(SkinProperty.SKIN_KEY , targetSkin.getEncodedValue(), targetSkin.getSignature()); profile.getPropertyMap().put(SkinProperty.SKIN_KEY, profileProperty); } }
public boolean isSaved() { getLazyLock().readLock().lock(); try { return rowId >= 0; } finally { getLazyLock().readLock().unlock(); } }
public void setRowId(int rowId) { getLazyLock().writeLock().lock(); try { this.rowId = rowId; } finally { getLazyLock().writeLock().unlock(); } }