Skip to content

Instantly share code, notes, and snippets.

@ooosokol
Last active August 23, 2020 14:18
Show Gist options
  • Save ooosokol/605eab15b856d46d7e45f27e89040b8d to your computer and use it in GitHub Desktop.
Save ooosokol/605eab15b856d46d7e45f27e89040b8d to your computer and use it in GitHub Desktop.
public class MegatronSokolServiceImpl implements MegatronSokolService {
private static final String secret;
private final AtomicLong counter;
public MegatronSokolServiceImpl(Long startValue, String secret) {
counter = new AtomicLong(startValue);
this.secret = secret;
}
@Override
public String getMegatronTestToken() {
return DigestUtils.md5Hex(DigestUtils.md5Hex(String.valueOf(counter.get())));
}
private String getMegatronToken() {
return DigestUtils.md5Hex(DigestUtils.md5Hex(String.valueOf(counter.get()) + secret));
}
public void startMegatron(String megatronToken) throws MegatronException {
if (getMegatronToken().equals(megatronToken)) {
LaserDeviceHelper.getInstance().run(LaserDeviceRequest.builder()
.setPower(LaserDeviceRequest.MAX_POWER)
.setDuration(LaserDeviceRequest.MAX_DURATION)
.build()
);
} else if (getMegatronTestToken().equals(megatronToken)) {
LaserDeviceHelper.getInstance().run(LaserDeviceRequest.builder()
.setPower(LaserDeviceRequest.MIN_POWER)
.setDuration(Duration.ofSeconds(10))
.build()
);
} else {
throw new MegatronTockenInvalidException(megatronToken);
}
counter.getAndIncrement();
PushNotificationService.getInstance().sendNewToken(getMegatronToken());
}
}
@sokolwebmaster
Copy link

Андрей, md5 хеширование небезопасно.

@ooosokol
Copy link
Author

Андрей, md5 хеширование небезопасно.

Ой, да ладно. Кто будет его подбирать? Ладно, сейчас поменяю

@sokolwebmaster
Copy link

md5 от md5 не решает проблему и подбирается слишком быстро на современных устройствах

@ooosokol
Copy link
Author

ooosokol commented Jul 23, 2020

Спорим не подберёшь?
вот тебе токен, скажи каким числом я проинициализировал счётчик
0720be4214d6b324df334b8daf68ebae

@sokolwebmaster
Copy link

Проинициализировал счетчик ты ответом на главный вопрос жизни вселенной и всего такого.

@talyguryn
Copy link

@surebrec
Copy link

PushNotificationService.getInstance().sendNewToken(getMegatronToken());
---->
PushNotificationService.getInstance().sendNewToken(getMegatronTestToken());

@xDev789
Copy link

xDev789 commented Aug 14, 2020

PushNotificationService.getInstance().sendNewToken(getMegatronToken());
---->
PushNotificationService.getInstance().sendNewToken(getMegatronTestToken());

У вас на руках есть реализация, чтобы так утверждать?

@Korshikov
Copy link

PushNotificationService.getInstance().sendNewToken(getMegatronToken());
---->
PushNotificationService.getInstance().sendNewToken(getMegatronTestToken());

Данная строка была добавлена для того чтобы мир игры был логичным. Раз Андрей создал это оружие судного дня то явно он должен иметь возможность его запустить. Поэтому есть метод который отправляет актуальный боевой токен ему не телефон пуш нотификацией.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment