1. Install JAVA SE6 (OS X v10.7/10.8) -> http://support.apple.com/kb/DL1572
JAVA SE6 (OS X v10.6) -> http://support.apple.com/kb/DL1573
JAVA SE5 & SE6 (OS X v10.5) -> http://support.apple.com/kb/DL1359
and install XMind (http://www.xmind.net/download/mac/)
2. Create environment folders and required library jar files for ant build
mkdir -p ~/xmind.verify/lib
mkdir -p ~/xmind.verify/src/net/xmind/verify/internal
cd ~/xmind.verify/lib
jar xvf /Applications/XMind.app/Contents/Resources/plugins/org.bouncycastle_1.4.7.jar bcprov-jdk15on-147.jar
cp /Applications/XMind.app/Contents/Resources/plugins/net.xmind.verify_3.3.0.201208102038.jar .
3. Use Java decompiler JD-GUI http://java.decompiler.free.fr/?q=jdgui to open/decompile the file ~/xmind.verify/lib/net.xmind.verify_3.3.0.201208102038.jar
4. save source code in JD-GUI for net.xmind.verify -> internal -> LicenseVerifier to folder ~/xmind.verify/src/net/xmind/verify/internal/
5. Modify LicenseVerifier.java as below
- LicenseVerifier.java Select all
/* 1 */ package net.xmind.verify.internal;
/* 2 */
/* 3 */ import java.util.ArrayList;
/* 4 */ import java.util.Collection;
/* 5 */ import java.util.Iterator;
/* 6 */ import java.util.List;
/* 7 */ import java.util.Properties;
/* 8 */ import java.util.Random;
/* 9 */ import net.xmind.signin.IAccountInfo;
/* 10 */ import net.xmind.signin.IAuthenticationListener;
/* 11 */ import net.xmind.signin.IDataStore;
/* 12 */ import net.xmind.signin.IXMindNetCommand;
/* 13 */ import net.xmind.signin.IXMindNetCommandHandler;
/* 14 */ import net.xmind.signin.XMindNet;
/* 15 */ import net.xmind.signin.internal.InternalXMindNet;
/* 16 */ import net.xmind.signin.internal.LicenseInfo;
/* 17 */ import net.xmind.signin.internal.XMindLicenseAgent;
/* 18 */ import net.xmind.signin.internal.XMindNetAccount;
/* 19 */ import net.xmind.signin.internal.XMindNetRequest;
/* 20 */ import net.xmind.verify.IValidity;
/* 21 */ import net.xmind.verify.IVerifyListener;
/* 22 */ import net.xmind.verify.ui.internal.ActivateProDialog;
/* 23 */ import org.bouncycastle.asn1.ASN1InputStream;
/* 24 */ import org.bouncycastle.asn1.ASN1Sequence;
/* 25 */ import org.bouncycastle.asn1.pkcs.RSAPublicKey;
/* 26 */ import org.bouncycastle.asn1.x509.SubjectPublicKeyInfo;
/* 27 */ import org.bouncycastle.crypto.CipherParameters;
/* 28 */ import org.bouncycastle.crypto.digests.MD5Digest;
/* 29 */ import org.bouncycastle.crypto.engines.RSAEngine;
/* 30 */ import org.bouncycastle.crypto.params.RSAKeyParameters;
/* 31 */ import org.bouncycastle.crypto.signers.PSSSigner;
/* 32 */ import org.bouncycastle.util.encoders.Base64;
/* 33 */ import org.eclipse.core.runtime.IProgressMonitor;
/* 34 */ import org.eclipse.core.runtime.IStatus;
/* 35 */ import org.eclipse.core.runtime.SafeRunner;
/* 36 */ import org.eclipse.core.runtime.jobs.IJobChangeEvent;
/* 37 */ import org.eclipse.core.runtime.jobs.Job;
/* 38 */ import org.eclipse.core.runtime.jobs.JobChangeAdapter;
/* 39 */ import org.eclipse.core.runtime.preferences.IEclipsePreferences;
/* 40 */ import org.eclipse.core.runtime.preferences.IScopeContext;
/* 41 */ import org.eclipse.core.runtime.preferences.InstanceScope;
/* 42 */ import org.eclipse.jface.preference.IPreferenceStore;
/* 43 */ import org.eclipse.jface.util.SafeRunnable;
/* 44 */ import org.eclipse.swt.widgets.Display;
/* 45 */ import org.eclipse.swt.widgets.Shell;
/* 46 */ import org.eclipse.ui.IWorkbench;
/* 47 */ import org.eclipse.ui.IWorkbenchWindow;
/* 48 */ import org.eclipse.ui.PlatformUI;
/* 49 */
/* 50 */ public class LicenseVerifier
/* 51 */ implements IAuthenticationListener, IXMindNetCommandHandler
/* 52 */ {
/* 53 */ private static LicenseVerifier INSTANCE = null;
/* 54 */ private static final int SALT_LENGTH = 32;
/* 55 */ private static final int PREFIX_LENGTH = 8;
/* 56 */ private static List<String> invalidLicenseKeys = new ArrayList<String>();
/* 57 */ private IValidity validity = null;
/* 58 */ private VerificationJob verifyJob = null;
/* 59 */ private Object jobLock = new Object();
/* 60 */ private List<ValidityNotifier> listeners = new ArrayList<ValidityNotifier>();
/* 61 */ private List<ValidityNotifier> callbacks = new ArrayList<ValidityNotifier>();
/* 62 */
/* 63 */ private LicenseVerifier() {
/* 64 */ XMindNet.addAuthenticationListener(this);
/* 65 */ XMindNet.addXMindNetCommandHandler("refresh", this);
/* 66 */ }
/* 67 */
/* 68 */ public void verify(int paramInt) {
/* 69 */ verify(null, paramInt, null, 0);
/* 70 */ }
/* 71 */
/* 72 */ public void verify(int paramInt, IVerifyListener paramIVerifyListener) {
/* 73 */ verify(null, paramInt, paramIVerifyListener, 0);
/* 74 */ }
/* 75 */
/* 76 */ public void verify(int paramInt1, IVerifyListener paramIVerifyListener, int paramInt2)
/* 77 */ {
/* 78 */ verify(null, paramInt1, paramIVerifyListener, paramInt2);
/* 79 */ }
/* 80 */
/* 81 */ public void verify(String paramString, int paramInt1, IVerifyListener paramIVerifyListener, int paramInt2)
/* 82 */ {
/* 83 */ if (((paramInt2 & 0x1) == 0) && (checkValid(this.validity, paramInt1))) {
/* 84 */ if (paramIVerifyListener != null)
/* 85 */ paramIVerifyListener.notifyValidity(this.validity);
/* 86 */ return;
/* 87 */ }
/* 88 */ if (paramIVerifyListener != null)
/* 89 */ synchronized (this.callbacks) {
/* 90 */ this.callbacks.add(new ValidityNotifier(paramIVerifyListener));
/* 91 */ }
/* 92 */ synchronized (this.jobLock) {
/* 93 */ if (this.verifyJob == null) {
/* 94 */ VerificationJob localVerificationJob = new VerificationJob(
/* 95 */ paramString, paramInt1, paramInt2);
/* 96 */ localVerificationJob
/* 97 */ .addJobChangeListener(new JobChangeAdapter()
/* 98 */ {
/* 99 */ public void done(IJobChangeEvent paramAnonymousIJobChangeEvent) {
/* 100 */ synchronized (LicenseVerifier.this.jobLock) {
/* 101 */ LicenseVerifier.this.verifyJob = null;
/* 102 */ }
/* 103 */ LicenseVerifier.this
/* 104 */ .setValidity((IValidity)paramAnonymousIJobChangeEvent
/* 105 */ .getResult());
/* 106 */ }
/* 107 */ });
/* 108 */ localVerificationJob.schedule();
/* 109 */ this.verifyJob = localVerificationJob;
/* 110 */ } else {
/* 111 */ this.verifyJob.updateActionName(paramString);
/* 112 */ this.verifyJob.updateRequiredStatus(paramInt1);
/* 113 */ this.verifyJob.updateStyle(paramInt2);
/* 114 */ }
/* 115 */ }
/* 116 */ }
/* 117 */
/* 118 */ public void addVerifyListener(IVerifyListener paramIVerifyListener) {
/* 119 */ synchronized (this.listeners) {
/* 120 */ this.listeners.add(new ValidityNotifier(paramIVerifyListener));
/* 121 */ }
/* 122 */ }
/* 123 */
/* 124 */ public void removeVerifyListener(IVerifyListener paramIVerifyListener) {
/* 125 */ synchronized (this.listeners) {
/* 126 */ Object[] arrayOfObject = this.listeners.toArray();
/* 127 */ this.listeners.clear();
/* 128 */ for (int i = 0; i < arrayOfObject.length; i++) {
/* 129 */ ValidityNotifier localValidityNotifier = (ValidityNotifier)arrayOfObject[i];
/* 130 */ if (localValidityNotifier.listener != paramIVerifyListener)
/* 131 */ this.listeners.add(localValidityNotifier);
/* 132 */ }
/* 133 */ }
/* 134 */ }
/* 135 */
/* 136 */ private void setValidity(IValidity paramIValidity) {
/* 137 */ paramIValidity = cloneValidity(paramIValidity);
/* 138 */ IValidity localIValidity = cloneValidity(paramIValidity);
/* 139 */ if (notifyAllCallbacks(localIValidity))
/* 140 */ return;
/* 141 */ notifyAllListeners(localIValidity);
/* 142 */ notifyLicenseAgent(localIValidity);
/* 143 */ this.validity = paramIValidity;
/* 144 */ if ((paramIValidity.getCode() & 0x6) != 0)
/* 145 */ verifyLicenseKeyValidity();
/* 146 */ }
/* 147 */
/* 148 */ private void verifyLicenseKeyValidity() {
/* 149 */ IPreferenceStore localIPreferenceStore = VerifyPlugin.getDefault()
/* 150 */ .getPreferenceStore();
/* 151 */ final String str1 = localIPreferenceStore.getString("licenseKey");
/* 152 */ final String str2 = localIPreferenceStore.getString("licenseEmail");
/* 153 */ Thread localThread = new Thread(new Runnable() {
/* 154 */ public void run() {
/* 155 */ if (!LicenseVerifier.checkLicenseKeyValidity(str2, str1)) {
/* 156 */ LicenseVerifier.invalidLicenseKeys.add(str2 + "|" + str1);
/* 157 */ LicenseVerifier.this.verify(7, null, 3);
/* 158 */ }
/* 159 */ }
/* 160 */ });
/* 161 */ localThread.setDaemon(true);
/* 162 */ localThread.setPriority(1);
/* 163 */ localThread.start();
/* 164 */ }
/* 165 */
/* 166 */ private static boolean checkLicenseKeyValidity(String paramString1, String paramString2)
/* 167 */ {
/* 168 */ return true;
/* 169 */ }
/* 170 */
/* 171 */ private boolean notifyAllCallbacks(IValidity paramIValidity)
/* 172 */ {
/* 173 */ ArrayList localArrayList=null;
/* 174 */ synchronized (this.callbacks) {
/* 175 */ localArrayList = new ArrayList<ValidityNotifier>(this.callbacks);
/* 176 */ this.callbacks.clear();
/* 177 */ }
/* 178 */ Iterator localIterator = localArrayList.iterator();
/* 179 */ while (localIterator.hasNext()) {
/* 180 */ ValidityNotifier vn = (ValidityNotifier)localIterator.next();
/* 181 */ if (vn.notifyValidityCallback(paramIValidity))
/* 182 */ return true;
/* 183 */ }
/* 184 */ return false;
/* 185 */ }
/* 186 */
/* 187 */ private void notifyAllListeners(IValidity paramIValidity) {
/* 188 */ Object[] arrayOfObject1 = this.listeners.toArray();
/* 189 */ for (Object localObject : arrayOfObject1)
/* 190 */ ((ValidityNotifier)localObject)
/* 191 */ .notifyValidityListener(paramIValidity);
/* 192 */ }
/* 193 */
/* 194 */ private void notifyLicenseAgent(IValidity paramIValidity)
/* 195 */ {
/* 196 */ InternalXMindNet.getInstance()
/* 197 */ .getLicenseAgent()
/* 198 */ .licenseVerified(
/* 199 */ new LicenseInfo(paramIValidity.getCode(),
/* 200 */ paramIValidity.getException(), paramIValidity
/* 201 */ .getLicensedTo()));
/* 202 */ }
/* 203 */
/* 204 */ public void postSignIn(IAccountInfo paramIAccountInfo) {
/* 205 */ verify(7, null, 3);
/* 206 */ }
/* 207 */
/* 208 */ public void postSignOut(IAccountInfo paramIAccountInfo) {
/* 209 */ if ((this.validity != null) && ((this.validity.getCode() & 0x1) != 0)) {
/* 210 */ saveLocalData(null, null, null, null);
/* 211 */ setValidity(createValidity(1024));
/* 212 */ }
/* 213 */ }
/* 214 */
/* 215 */ public boolean handleXMindNetCommand(IXMindNetCommand paramIXMindNetCommand) {
/* 216 */ refreshValidity(paramIXMindNetCommand.getContent());
/* 217 */ return true;
/* 218 */ }
/* 219 */
/* 220 */ private void refreshValidity(IDataStore paramIDataStore) {
/* 221 */ if (paramIDataStore == null)
/* 222 */ return;
/* 223 */ if ((this.validity != null) && ((this.validity.getCode() & 0x6) != 0))
/* 224 */ return;
/* 225 */ String str1 = paramIDataStore.getString("user");
/* 226 */ String str2 = paramIDataStore.getString("uid");
/* 227 */ if ((str1 == null) || (str2 == null))
/* 228 */ return;
/* 229 */ IAccountInfo localIAccountInfo = XMindNet.getAccountInfo();
/* 230 */ if ((localIAccountInfo == null) ||
/* 231 */ (!str1.equals(localIAccountInfo.getUser())))
/* 232 */ return;
/* 233 */ String str3 = extractExpiration(paramIDataStore, str2);
/* 234 */ int i;
/* 235 */ //int i;
/* 236 */ if (str3 == null)
/* 237 */ i = 4096;
/* 238 */ else
/* 239 */ i = parseExpiration(str3, str2);
/* 240 */ saveLocalData(str2, str3, null, null);
/* 241 */ this.validity = createValidity(i, str1);
/* 242 */ }
/* 243 */
/* 244 */ private static boolean checkValid(IStatus paramIStatus, int paramInt) {
/* 245 */ return (paramIStatus != null) && (hasValidity(paramIStatus, paramInt));
/* 246 */ }
/* 247 */
/* 248 */ private static boolean hasValidity(IStatus paramIStatus, int paramInt) {
/* 249 */ return (paramIStatus.getCode() & paramInt) != 0;
/* 250 */ }
/* 251 */
/* 252 */ private static void saveLocalData(String paramString1, String paramString2, String paramString3, String paramString4)
/* 253 */ {
/* 254 */ IPreferenceStore localIPreferenceStore = VerifyPlugin.getDefault()
/* 255 */ .getPreferenceStore();
/* 256 */ savePreference(localIPreferenceStore, "licenseEmail", paramString4);
/* 257 */ savePreference(localIPreferenceStore, "licenseKey", paramString3);
/* 258 */ savePreference(localIPreferenceStore, "uid", paramString1);
/* 259 */ savePreference(localIPreferenceStore, "expiration", paramString2);
/* 260 */ flushStore();
/* 261 */ }
/* 262 */
/* 263 */ private static void savePreference(IPreferenceStore paramIPreferenceStore, String paramString1, String paramString2)
/* 264 */ {
/* 265 */ if ((paramString2 != null) && (!"".equals(paramString2)))
/* 266 */ paramIPreferenceStore.setValue(paramString1, paramString2);
/* 267 */ else
/* 268 */ paramIPreferenceStore.setValue(paramString1, "");
/* 269 */ }
/* 270 */
/* 271 */ private static void flushStore() {
/* 272 */ IEclipsePreferences localIEclipsePreferences = InstanceScope.INSTANCE
/* 273 */ .getNode("net.xmind.varify");
/* 274 */ if (localIEclipsePreferences != null)
/* 275 */ try {
/* 276 */ localIEclipsePreferences.flush();
/* 277 */ }
/* 278 */ catch (Throwable localThrowable) {
/* 279 */ }
/* 280 */ }
/* 281 */
/* 282 */ private static String extractExpiration(IDataStore paramIDataStore, String paramString) {
/* 283 */ if (!paramIDataStore.has("expireDate"))
/* 284 */ return null;
/* 285 */ long l = paramIDataStore.getLong("expireDate");
/* 286 */ if (l <= 0L)
/* 287 */ return null;
/* 288 */ if (paramIDataStore.getBoolean("expired"))
/* 289 */ l = 0L;
/* 290 */ StringBuffer localStringBuffer = new StringBuffer(64);
/* 291 */ localStringBuffer.append('`');
/* 292 */ localStringBuffer.append('\t');
/* 293 */ localStringBuffer.append('\n');
/* 294 */ localStringBuffer.append(Long.toString(l, 16));
/* 295 */ String str = Cryptus.encrypt(localStringBuffer.toString(), paramString);
/* 296 */ return str;
/* 297 */ }
/* 298 */
/* 299 */ private static int parseExpiration(String paramString1, String paramString2) {
/* 300 */ String str = Cryptus.decrypt(paramString1, paramString2);
/* 301 */ if ((str != null) && (!"".equals(str)) && (str.startsWith("`\t\n"))) {
/* 302 */ long l = Long.parseLong(str.substring(3), 16);
/* 303 */ if (System.currentTimeMillis() < l)
/* 304 */ return 1;
/* 305 */ return 2048;
/* 306 */ }
/* 307 */ return 1024;
/* 308 */ }
/* 309 */
/* 310 */ private static IValidity cloneValidity(IValidity paramIValidity) {
/* 311 */ return new Validity(paramIValidity.getSeverity(),
/* 312 */ paramIValidity.getPlugin(), paramIValidity.getCode(),
/* 313 */ paramIValidity.getMessage(), paramIValidity.getException(),
/* 314 */ paramIValidity.getLicensedTo());
/* 315 */ }
/* 316 */
/* 317 */ private static IValidity createValidity(int paramInt) {
/* 318 */ return createValidity(paramInt, null, null, false);
/* 319 */ }
/* 320 */
/* 321 */ private static IValidity createValidity(int paramInt, String paramString) {
/* 322 */ return createValidity(paramInt, paramString, null, false);
/* 323 */ }
/* 324 */
/* 325 */ private static IValidity createValidity(int paramInt, Throwable paramThrowable)
/* 326 */ {
/* 327 */ return createValidity(paramInt, null, paramThrowable, false);
/* 328 */ }
/* 329 */
/* 330 */ private static IValidity createValidity(int paramInt, String paramString, Throwable paramThrowable, boolean paramBoolean)
/* 331 */ {
/* 332 */ if (paramBoolean)
/* 333 */ return new Validity(8, "net.xmind.varify", 1, null, paramThrowable,
/* 334 */ paramString);
/* 335 */ return new Validity(0, "net.xmind.varify", 1, null, paramThrowable,
/* 336 */ paramString);
/* 337 */ }
/* 338 */
/* 339 */ public static LicenseVerifier getInstance()
/* 340 */ {
/* 341 */ if (INSTANCE == null)
/* 342 */ INSTANCE = new LicenseVerifier();
/* 343 */ return INSTANCE;
/* 344 */ }
/* 345 */ private static class ValidityNotifier {
/* 346 */ private IVerifyListener listener;
/* 347 */ private Display display;
/* 348 */
/* 349 */ public ValidityNotifier(IVerifyListener paramIVerifyListener) {
/* 350 */ this.listener = paramIVerifyListener;
/* 351 */ this.display = Display.getCurrent();
/* 352 */ }
/* 353 */
/* 354 */ public void notifyValidityListener(final IValidity paramIValidity) {
/* 355 */ if (this.display != null) {
/* 356 */ if (!this.display.isDisposed())
/* 357 */ this.display.syncExec(new Runnable() {
/* 358 */ public void run() {
/* 359 */ SafeRunner.run(new SafeRunnable() {
/* 360 */ public void run() throws Exception {
/* 361 */ LicenseVerifier.ValidityNotifier.this.listener
/* 362 */ .notifyValidity(paramIValidity);
/* 363 */ }
/* 364 */ });
/* 365 */ }
/* 366 */ });
/* 367 */ }
/* 368 */ else SafeRunner.run(new SafeRunnable() {
/* 369 */ public void run() throws Exception {
/* 370 */ LicenseVerifier.ValidityNotifier.this.listener
/* 371 */ .notifyValidity(paramIValidity);
/* 372 */ }
/* 373 */ });
/* 374 */ }
/* 375 */
/* 376 */ public boolean notifyValidityCallback(final IValidity paramIValidity)
/* 377 */ {
/* 378 */ if ((this.listener instanceof IVerifyCallback)) {
/* 379 */ final boolean[] arrayOfBoolean = new boolean[1];
/* 380 */ arrayOfBoolean[0] = false;
/* 381 */ if (this.display != null) {
/* 382 */ if (!this.display.isDisposed())
/* 383 */ this.display.syncExec(new Runnable() {
/* 384 */ public void run() {
/* 385 */ SafeRunner.run(new SafeRunnable() {
/* 386 */ public void run() throws Exception {
/* 387 */ ((IVerifyCallback)LicenseVerifier.ValidityNotifier.this.listener)
/* 388 */ .handleValidity(paramIValidity);
/* 389 */ }
/* 390 */ });
/* 391 */ }
/* 392 */ });
/* 393 */ }
/* 394 */ else SafeRunner.run(new SafeRunnable() {
/* 395 */ public void run() throws Exception {
/* 396 */ arrayOfBoolean[0] = ((IVerifyCallback)LicenseVerifier.ValidityNotifier.this.listener)
/* 397 */ .handleValidity(paramIValidity);
/* 398 */ }
/* 399 */ });
/* 400 */ return arrayOfBoolean[0];
/* 401 */ }
/* 402 */ notifyValidityListener(paramIValidity);
/* 403 */ return false;
/* 404 */ }
/* 405 */ }
/* 406 */
/* 407 */ private static class VerificationJob extends Job {
/* 408 */ private List<String> actionNames = new ArrayList<String>(2);
/* 409 */ private int requiredStatus;
/* 410 */ private int style;
/* 411 */ private IPreferenceStore prefStore;
/* 412 */ private IStatus validity;
/* 413 */ private String licenseKey = null;
/* 414 */ private String licenseEmail = null;
/* 415 */ private String user = null;
/* 416 */ private String authToken = null;
/* 417 */ private String uid = null;
/* 418 */ private String expiration = null;
/* 419 */ private XMindNetRequest retrieveUIDRequest = new XMindNetRequest(true);
/* 420 */ private XMindNetRequest retrieveSubscriptionRequest = new XMindNetRequest(
/* 421 */ true);
/* 422 */
/* 423 */ private ActivateProDialog inputDialog = null;
/* 424 */
/* 425 */ public VerificationJob(String paramString, int paramInt1, int paramInt2) {
/* 426 */ super("");
/* 427 */ if (paramString != null)
/* 428 */ this.actionNames.add(paramString);
/* 429 */ this.requiredStatus = paramInt1;
/* 430 */ this.style = paramInt2;
/* 431 */ this.prefStore = VerifyPlugin.getDefault().getPreferenceStore();
/* 432 */ this.validity = LicenseVerifier.createValidity(1024);
/* 433 */ setSystem(true);
/* 434 */ }
/* 435 */
/* 436 */ public void updateActionName(String paramString) {
/* 437 */ if (paramString != null)
/* 438 */ this.actionNames.add(paramString);
/* 439 */ }
/* 440 */
/* 441 */ public void updateRequiredStatus(int paramInt) {
/* 442 */ this.requiredStatus &= paramInt;
/* 443 */ }
/* 444 */
/* 445 */ public void updateStyle(int paramInt) {
/* 446 */ this.style = mergeStyle(this.style, paramInt, 1, true);
/* 447 */ this.style = mergeStyle(this.style, paramInt, 2, true);
/* 448 */ this.style = mergeStyle(this.style, paramInt, 4, false);
/* 449 */ this.style = mergeStyle(this.style, paramInt, 8, false);
/* 450 */ }
/* 451 */
/* 452 */ private static int mergeStyle(int paramInt1, int paramInt2, int paramInt3, boolean paramBoolean)
/* 453 */ {
/* 454 */ if (paramBoolean)
/* 455 */ return paramInt1 & (
/* 456 */ paramInt2 & paramInt3 | paramInt3 ^ 0xFFFFFFFF);
/* 457 */ return paramInt1 | paramInt2 & paramInt3;
/* 458 */ }
/* 459 */
/* 460 */ protected IStatus run(IProgressMonitor paramIProgressMonitor) {
/* 461 */ verify(paramIProgressMonitor);
/* 462 */ if ((paramIProgressMonitor.isCanceled()) &&
/* 463 */ (!LicenseVerifier.checkValid(this.validity, 7)))
/* 464 */ this.validity = LicenseVerifier.createValidity(1024, null,
/* 465 */ null, true);
/* 466 */ LicenseVerifier.saveLocalData(this.uid, this.expiration,
/* 467 */ this.licenseKey, this.licenseEmail);
/* 468 */ return this.validity;
/* 469 */ }
/* 470 */
/* 471 */ private boolean isValid() {
/* 472 */ return LicenseVerifier.checkValid(this.validity,
/* 473 */ this.requiredStatus);
/* 474 */ }
/* 475 */
/* 476 */ private void verify(IProgressMonitor paramIProgressMonitor) {
/* 477 */ verifyVindy(paramIProgressMonitor);
/* 478 */ if (paramIProgressMonitor.isCanceled())
/* 479 */ return;
/* 480 */ if (isValid())
/* 481 */ return;
/* 482 */ verifyLocalData(paramIProgressMonitor);
/* 483 */ if (paramIProgressMonitor.isCanceled())
/* 484 */ return;
/* 485 */ if (((this.style & 0x8) == 0) && (
/* 486 */ (isValid()) || ((this.style & 0x2) != 0)))
/* 487 */ return;
/* 488 */ waitForWorkbenchReady(paramIProgressMonitor);
/* 489 */ if (paramIProgressMonitor.isCanceled())
/* 490 */ return;
/* 491 */ openInputDialog(paramIProgressMonitor);
/* 492 */ }
/* 493 */
/* 494 */ private void waitForWorkbenchReady(IProgressMonitor paramIProgressMonitor)
/* 495 */ {
/* 496 */ if (System.getProperty("org.xmind.cathy.app.status") == null)
/* 497 */ return;
/* 498 */ try {
/* 499 */ do {
/* 500 */ if (paramIProgressMonitor.isCanceled())
/* 501 */ return;
/* 502 */ Thread.sleep(500L);
/* 503 */ }
/* 504 */ while (!
/* 505 */ isWorkbenchReady());
/* 506 */ } catch (InterruptedException localInterruptedException) {
/* 507 */ }
/* 508 */ }
/* 509 */
/* 510 */ private boolean isWorkbenchReady() {
/* 511 */ return "workbenchReady".equals(
/* 512 */ System.getProperty("org.xmind.cathy.app.status"));
/* 513 */ }
/* 514 */
/* 515 */ private void verifyLocalData(IProgressMonitor paramIProgressMonitor) {
/* 516 */ loadLocalLicenseKey(paramIProgressMonitor);
/* 517 */ if (paramIProgressMonitor.isCanceled())
/* 518 */ return;
/* 519 */ if ((hasLicenseKey()) && (hasLicenseEmail())) {
/* 520 */ verifyProLicenseKey(paramIProgressMonitor);
/* 521 */ if (paramIProgressMonitor.isCanceled())
/* 522 */ return;
/* 523 */ if (!isValid())
/* 524 */ verifyPlusLicenseKey(paramIProgressMonitor);
/* 525 */ }
/* 526 */ if (paramIProgressMonitor.isCanceled())
/* 527 */ return;
/* 528 */ IStatus localIStatus = this.validity;
/* 529 */ boolean bool = LicenseVerifier.checkValid(localIStatus, 2);
/* 530 */ if (bool)
/* 531 */ return;
/* 532 */ loadLocalUserInfo(paramIProgressMonitor);
/* 533 */ if (paramIProgressMonitor.isCanceled())
/* 534 */ return;
/* 535 */ if ((hasUser()) && (hasAuthToken())) {
/* 536 */ loadLocalSubscriptionInfo(paramIProgressMonitor);
/* 537 */ if (paramIProgressMonitor.isCanceled())
/* 538 */ return;
/* 539 */ if ((hasUID()) && (hasExpiration())) {
/* 540 */ verifyLocalSubscriptionInfo(paramIProgressMonitor);
/* 541 */ if (isValid())
/* 542 */ return;
/* 543 */ }
/* 544 */ if (paramIProgressMonitor.isCanceled())
/* 545 */ return;
/* 546 */ verifySubscription(paramIProgressMonitor);
/* 547 */ if (isValid())
/* 548 */ return;
/* 549 */ this.validity = localIStatus;
/* 550 */ }
/* 551 */ }
/* 552 */
/* 553 */ private void loadLocalLicenseKey(IProgressMonitor paramIProgressMonitor) {
/* 554 */ this.licenseKey = this.prefStore.getString("licenseKey");
/* 555 */ this.licenseEmail = this.prefStore.getString("licenseEmail");
/* 556 */ }
/* 557 */
/* 558 */ private void loadLocalUserInfo(IProgressMonitor paramIProgressMonitor) {
/* 559 */ IAccountInfo localIAccountInfo = XMindNet.getAccountInfo();
/* 560 */ this.user = (localIAccountInfo == null ? null : localIAccountInfo
/* 561 */ .getUser());
/* 562 */ this.authToken = (localIAccountInfo == null ? null :
/* 563 */ localIAccountInfo.getAuthToken());
/* 564 */ }
/* 565 */
/* 566 */ private void loadLocalSubscriptionInfo(IProgressMonitor paramIProgressMonitor)
/* 567 */ {
/* 568 */ this.uid = this.prefStore.getString("uid");
/* 569 */ this.expiration = this.prefStore.getString("expiration");
/* 570 */ }
/* 571 */
/* 572 */ private void verifyLocalSubscriptionInfo(IProgressMonitor paramIProgressMonitor)
/* 573 */ {
/* 574 */ this.validity = LicenseVerifier.createValidity(
/* 575 */ LicenseVerifier.parseExpiration(this.expiration, this.uid),
/* 576 */ this.user);
/* 577 */ }
/* 578 */
/* 579 */ private void verifyProLicenseKey(IProgressMonitor paramIProgressMonitor) {
/* 580 */ if (LicenseVerifier.invalidLicenseKeys.contains(this.licenseEmail +
/* 581 */ "|" + this.licenseKey))
/* 582 */ this.validity = LicenseVerifier.createValidity(8192);
/* 583 */ else
/* 584 */ verifySignature(this.licenseEmail, this.licenseKey,
/* 585 */ "`_xmind.org\n9527\t", getProPublicKey(), 2,
/* 586 */ paramIProgressMonitor);
/* 587 */ }
/* 588 */
/* 589 */ private void verifyPlusLicenseKey(IProgressMonitor paramIProgressMonitor) {
/* 590 */ if (LicenseVerifier.invalidLicenseKeys.contains(this.licenseEmail +
/* 591 */ "|" + this.licenseKey))
/* 592 */ this.validity = LicenseVerifier.createValidity(8192);
/* 593 */ else
/* 594 */ verifySignature(this.licenseEmail, this.licenseKey,
/* 595 */ "*#xmind\nnet.3914\t", getPlusPublicKey(), 4,
/* 596 */ paramIProgressMonitor);
/* 597 */ }
/* 598 */
/* 599 */ private void verifySignature(String paramString1, String paramString2, String paramString3, byte[] paramArrayOfByte, int paramInt, IProgressMonitor paramIProgressMonitor)
/* 600 */ {
/* 601 */ if (paramString2.length() < 8) {
/* 602 */ this.validity = LicenseVerifier.createValidity(8192);
/* 603 */ return;
/* 604 */ }
/* 605 */ try {
/* 606 */ paramString1 = paramString2.substring(0, 8) + paramString1;
/* 607 */ paramString2 = paramString2.substring(8);
/* 608 */ byte[] arrayOfByte = Base32.decode(paramString2);
/* 609 */ if (isSignatureValid((paramString1 + paramString3).getBytes(),
/* 610 */ arrayOfByte, paramArrayOfByte))
/* 611 */ this.validity = LicenseVerifier.createValidity(paramInt,
/* 612 */ this.licenseEmail);
/* 613 */ else
/* 614 */ this.validity = LicenseVerifier.createValidity(8192);
/* 615 */ } catch (Exception localException) {
/* 616 */ this.validity = LicenseVerifier.createValidity(1073741824,
/* 617 */ localException);
/* 618 */ }
/* 619 */ }
/* 620 */
/* 621 */ private boolean isSignatureValid(byte[] paramArrayOfByte1, byte[] paramArrayOfByte2, byte[] paramArrayOfByte3)
/* 622 */ throws Exception
/* 623 */ {
/* 624 */ RSAEngine localRSAEngine = new RSAEngine();
/* 625 */ MD5Digest localMD5Digest = new MD5Digest();
/* 626 */ PSSSigner localPSSSigner = new PSSSigner(localRSAEngine,
/* 627 */ localMD5Digest, 32);
/* 628 */ localPSSSigner.init(false, parsePublicKey(paramArrayOfByte3));
/* 629 */ localPSSSigner.update(paramArrayOfByte1, 0,
/* 630 */ paramArrayOfByte1.length);
/* 631 */ return localPSSSigner.verifySignature(paramArrayOfByte2);
/* 632 */ }
/* 633 */
/* 634 */ private byte[] getProPublicKey() {
/* 635 */ return new byte[] { 77, 73, 71, 102, 77, 65, 48, 71, 67, 83, 113,
/* 636 */ 71, 83, 73, 98, 51, 68, 81, 69, 66, 65, 81, 85, 65, 65, 52,
/* 637 */ 71, 78, 65, 68, 67, 66, 105, 81, 75, 66, 103, 81, 67, 100,
/* 638 */ 54, 74, 99, 100, 109, 118, 100, 85, 83, 84, 112, 66, 78,
/* 639 */ 118, 114, 119, 55, 83, 49, 73, 100, 114, 110, 76, 106, 70,
/* 640 */ 79, 110, 50, 117, 112, 89, 120, 67, 52, 85, 101, 71, 121,
/* 641 */ 112, 101, 43, 68, 119, 85, 122, 52, 83, 113, 54, 115, 100,
/* 642 */ 67, 100, 119, 68, 83, 118, 56, 107, 114, 52, 82, 99, 77,
/* 643 */ 82, 83, 75, 55, 110, 77, 78, 55, 57, 79, 57, 104, 99, 121,
/* 644 */ 106, 90, 69, 103, 105, 119, 120, 57, 101, 75, 69, 74, 85,
/* 645 */ 99, 68, 82, 101, 112, 97, 48, 66, 121, 72, 115, 49, 56,
/* 646 */ 102, 71, 113, 74, 105, 52, 51, 110, 57, 47, 118, 71, 104,
/* 647 */ 99, 78, 84, 86, 120, 85, 109, 53, 109, 112, 74, 115, 103,
/* 648 */ 53, 82, 112, 51, 111, 74, 51, 56, 98, 68, 86, 69, 110, 55,
/* 649 */ 68, 55, 88, 116, 82, 101, 78, 78, 83, 78, 101, 113, 77,
/* 650 */ 111, 121, 112, 120, 105, 69, 114, 43, 113, 55, 110, 119,
/* 651 */ 73, 68, 65, 81, 65, 66 };
/* 652 */ }
/* 653 */
/* 654 */ private byte[] getPlusPublicKey() {
/* 655 */ return new byte[] { 77, 73, 71, 102, 77, 65, 48, 71, 67, 83, 113,
/* 656 */ 71, 83, 73, 98, 51, 68, 81, 69, 66, 65, 81, 85, 65, 65, 52,
/* 657 */ 71, 78, 65, 68, 67, 66, 105, 81, 75, 66, 103, 81, 67, 104,
/* 658 */ 105, 71, 48, 119, 72, 104, 43, 115, 68, 57, 49, 52, 54, 65,
/* 659 */ 98, 76, 75, 75, 76, 73, 101, 48, 98, 83, 87, 110, 122, 71,
/* 660 */ 65, 112, 106, 43, 120, 110, 101, 121, 69, 110, 65, 112, 57,
/* 661 */ 111, 116, 118, 83, 52, 105, 101, 48, 78, 77, 75, 72, 122,
/* 662 */ 101, 81, 89, 48, 118, 47, 107, 65, 89, 70, 51, 99, 102, 43,
/* 663 */ 114, 68, 113, 73, 68, 90, 85, 71, 109, 49, 79, 115, 105,
/* 664 */ 72, 75, 116, 57, 50, 112, 57, 72, 106, 119, 81, 48, 48, 89,
/* 665 */ 120, 117, 116, 87, 78, 116, 109, 109, 55, 90, 73, 104, 69,
/* 666 */ 57, 90, 89, 43, 116, 76, 100, 87, 78, 118, 116, 53, 107,
/* 667 */ 55, 52, 82, 47, 48, 100, 51, 75, 81, 69, 90, 76, 68, 82,
/* 668 */ 109, 80, 114, 98, 49, 109, 104, 116, 73, 65, 50, 89, 75,
/* 669 */ 108, 82, 50, 77, 116, 109, 51, 43, 82, 113, 68, 101, 50,
/* 670 */ 115, 90, 78, 109, 112, 71, 111, 102, 119, 73, 68, 65, 81,
/* 671 */ 65, 66 };
/* 672 */ }
/* 673 */
/* 674 */ private byte[] getVindyPublicKey() {
/* 675 */ return new byte[] { 77, 73, 71, 102, 77, 65, 48, 71, 67, 83, 113,
/* 676 */ 71, 83, 73, 98, 51, 68, 81, 69, 66, 65, 81, 85, 65, 65, 52,
/* 677 */ 71, 78, 65, 68, 67, 66, 105, 81, 75, 66, 103, 81, 68, 98,
/* 678 */ 73, 106, 85, 74, 67, 47, 121, 76, 77, 83, 106, 113, 74, 76,
/* 679 */ 99, 48, 116, 81, 43, 98, 54, 97, 69, 97, 103, 66, 68, 70,
/* 680 */ 47, 101, 105, 81, 100, 70, 51, 49, 103, 79, 103, 98, 52,
/* 681 */ 113, 105, 54, 85, 54, 113, 56, 97, 81, 65, 43, 65, 85, 84,
/* 682 */ 56, 67, 101, 87, 68, 102, 108, 83, 119, 100, 85, 53, 118,
/* 683 */ 55, 86, 53, 86, 98, 111, 56, 86, 102, 47, 119, 75, 81, 75,
/* 684 */ 119, 119, 113, 114, 48, 119, 98, 56, 66, 87, 85, 53, 51,
/* 685 */ 85, 121, 120, 121, 65, 73, 115, 121, 68, 118, 77, 110, 77,
/* 686 */ 114, 118, 51, 119, 85, 101, 48, 71, 98, 68, 102, 82, 76,
/* 687 */ 53, 108, 105, 101, 101, 49, 98, 105, 75, 99, 75, 103, 100,
/* 688 */ 104, 107, 73, 121, 53, 88, 89, 114, 109, 77, 86, 49, 74,
/* 689 */ 48, 50, 74, 49, 79, 89, 98, 109, 115, 69, 110, 49, 107, 70,
/* 690 */ 99, 122, 122, 116, 115, 47, 72, 79, 119, 73, 68, 65, 81,
/* 691 */ 65, 66 };
/* 692 */ }
/* 693 */
/* 694 */ private CipherParameters parsePublicKey(byte[] paramArrayOfByte) throws Exception
/* 695 */ {
/* 696 */ byte[] arrayOfByte = Base64.decode(paramArrayOfByte);
/* 697 */ ASN1InputStream localASN1InputStream = new ASN1InputStream(
/* 698 */ arrayOfByte);
/* 699 */ ASN1Sequence localASN1Sequence = (ASN1Sequence)localASN1InputStream
/* 700 */ .readObject();
/* 701 */ SubjectPublicKeyInfo localSubjectPublicKeyInfo = new SubjectPublicKeyInfo(
/* 702 */ localASN1Sequence);
/* 703 */ RSAPublicKey localRSAPublicKey =
/* 704 */ RSAPublicKey.getInstance(localSubjectPublicKeyInfo.parsePublicKey());
/* 705 */ return new RSAKeyParameters(false, localRSAPublicKey.getModulus(),
/* 706 */ localRSAPublicKey.getPublicExponent());
/* 707 */ }
/* 708 */
/* 709 */ private void verifyVindy(IProgressMonitor paramIProgressMonitor) {
/* 710 */ String str = checkValidVindy(paramIProgressMonitor);
/* 711 */ if (str != null)
/* 712 */ this.validity = LicenseVerifier.createValidity(0, str);
/* 713 */ }
/* 714 */
/* 715 */ private String checkValidVindy(IProgressMonitor paramIProgressMonitor) {
/* 716 */ String str1 =
/* 717 */ System.getProperty("org.xmind.product.distribution.id");
/* 718 */ if ((str1 == null) || ("".equals(str1)) ||
/* 719 */ (!str1.startsWith("vindy")))
/* 720 */ return null;
/* 721 */ String str2 =
/* 722 */ System.getProperty("org.xmind.product.distribution.vindy.org");
/* 723 */ if ((str2 == null) || ("".equals(str2)))
/* 724 */ return null;
/* 725 */ String str3 =
/* 726 */ System.getProperty("org.xmind.product.distribution.vindy.time");
/* 727 */ if ((str3 == null) || ("".equals(str3)))
/* 728 */ return null;
/* 729 */ String str4 =
/* 730 */ System.getProperty("org.xmind.product.distribution.vindy.name");
/* 731 */ if ((str4 == null) || ("".equals(str4)))
/* 732 */ return null;
/* 733 */ String str5 = str2 + str3;
/* 734 */ IStatus localIStatus = this.validity;
/* 735 */ verifySignature(str5, str4, "^xmap61\nbg4[d\t",
/* 736 */ getVindyPublicKey(), 2, paramIProgressMonitor);
/* 737 */ if (isValid())
/* 738 */ return str2;
/* 739 */ this.validity = localIStatus;
/* 740 */ return null;
/* 741 */ }
/* 742 */
/* 743 */ private void verifySubscription(IProgressMonitor paramIProgressMonitor) {
/* 744 */ retrieveUID(paramIProgressMonitor);
/* 745 */ if (paramIProgressMonitor.isCanceled())
/* 746 */ return;
/* 747 */ if (hasUID())
/* 748 */ retrieveSubscription(paramIProgressMonitor);
/* 749 */ }
/* 750 */
/* 751 */ private void openInputDialog(final IProgressMonitor paramIProgressMonitor)
/* 752 */ {
/* 753 */ final Properties localProperties = new Properties();
/* 754 */ if (this.licenseEmail != null)
/* 755 */ localProperties.setProperty("licenseEmail", this.licenseEmail);
/* 756 */ if (this.licenseEmail != null)
/* 757 */ localProperties.setProperty("licenseKey", this.licenseKey);
/* 758 */ if (this.user != null)
/* 759 */ localProperties.setProperty("user", this.user);
/* 760 */ final Job local1 = new Job("Verify Pro License Key")
/* 761 */ {
/* 762 */ protected IStatus run(IProgressMonitor paramAnonymousIProgressMonitor) {
/* 763 */ doVerifyLicenseKey(paramAnonymousIProgressMonitor);
/* 764 */ return LicenseVerifier.VerificationJob.this.validity;
/* 765 */ }
/* 766 */
/* 767 */ private void doVerifyLicenseKey(IProgressMonitor paramAnonymousIProgressMonitor)
/* 768 */ {
/* 769 */ paramAnonymousIProgressMonitor.beginTask(null, 1);
/* 770 */ if ((paramIProgressMonitor.isCanceled()) ||
/* 771 */ (paramAnonymousIProgressMonitor.isCanceled()))
/* 772 */ return;
/* 773 */ LicenseVerifier.VerificationJob.this
/* 774 */ .loadInfoFromInput(localProperties);
/* 775 */ if ((paramIProgressMonitor.isCanceled()) ||
/* 776 */ (paramAnonymousIProgressMonitor.isCanceled()))
/* 777 */ return;
/* 778 */ if (LicenseVerifier.VerificationJob.this.hasLicenseKey())
/* 779 */ {
/* 780 */ if (LicenseVerifier.VerificationJob.this
/* 781 */ .hasLicenseEmail())
/* 782 */ LicenseVerifier.VerificationJob.this
/* 783 */ .verifyProLicenseKey(paramAnonymousIProgressMonitor);
/* 784 */ }
/* 785 */ if ((!paramIProgressMonitor.isCanceled()) && (
/* 786 */ paramAnonymousIProgressMonitor.isCanceled()));
/* 787 */ }
/* 788 */ };
/* 789 */ local1.setSystem(true);
/* 790 */ final Job local2 = new Job("Verify Plus License Key")
/* 791 */ {
/* 792 */ protected IStatus run(IProgressMonitor paramAnonymousIProgressMonitor) {
/* 793 */ doVerifyLicenseKey(paramAnonymousIProgressMonitor);
/* 794 */ return LicenseVerifier.VerificationJob.this.validity;
/* 795 */ }
/* 796 */
/* 797 */ private void doVerifyLicenseKey(IProgressMonitor paramAnonymousIProgressMonitor)
/* 798 */ {
/* 799 */ paramAnonymousIProgressMonitor.beginTask(null, 1);
/* 800 */ if ((paramIProgressMonitor.isCanceled()) ||
/* 801 */ (paramAnonymousIProgressMonitor.isCanceled()))
/* 802 */ return;
/* 803 */ LicenseVerifier.VerificationJob.this
/* 804 */ .loadInfoFromInput(localProperties);
/* 805 */ if ((paramIProgressMonitor.isCanceled()) ||
/* 806 */ (paramAnonymousIProgressMonitor.isCanceled()))
/* 807 */ return;
/* 808 */ if (LicenseVerifier.VerificationJob.this.hasLicenseKey())
/* 809 */ {
/* 810 */ if (LicenseVerifier.VerificationJob.this
/* 811 */ .hasLicenseEmail())
/* 812 */ LicenseVerifier.VerificationJob.this
/* 813 */ .verifyPlusLicenseKey(paramAnonymousIProgressMonitor);
/* 814 */ }
/* 815 */ if ((!paramIProgressMonitor.isCanceled()) && (
/* 816 */ paramAnonymousIProgressMonitor.isCanceled()));
/* 817 */ }
/* 818 */ };
/* 819 */ local2.setSystem(true);
/* 820 */ final Job local3 = new Job("Verify License Key")
/* 821 */ {
/* 822 */ protected IStatus run(IProgressMonitor paramAnonymousIProgressMonitor) {
/* 823 */ doVerifySubscription(paramAnonymousIProgressMonitor);
/* 824 */ return LicenseVerifier.VerificationJob.this.validity;
/* 825 */ }
/* 826 */
/* 827 */ private void doVerifySubscription(IProgressMonitor paramAnonymousIProgressMonitor)
/* 828 */ {
/* 829 */ paramAnonymousIProgressMonitor.beginTask(null, 1);
/* 830 */ if ((paramIProgressMonitor.isCanceled()) ||
/* 831 */ (paramAnonymousIProgressMonitor.isCanceled()))
/* 832 */ return;
/* 833 */ LicenseVerifier.VerificationJob.this
/* 834 */ .loadInfoFromInput(localProperties);
/* 835 */ if ((paramIProgressMonitor.isCanceled()) ||
/* 836 */ (paramAnonymousIProgressMonitor.isCanceled()))
/* 837 */ return;
/* 838 */ if (LicenseVerifier.VerificationJob.this.hasUser())
/* 839 */ {
/* 840 */ if (LicenseVerifier.VerificationJob.this
/* 841 */ .hasAuthToken())
/* 842 */ LicenseVerifier.VerificationJob.this
/* 843 */ .verifySubscription(paramAnonymousIProgressMonitor);
/* 844 */ }
/* 845 */ if ((!paramIProgressMonitor.isCanceled()) && (
/* 846 */ paramAnonymousIProgressMonitor.isCanceled()));
/* 847 */ }
/* 848 */
/* 849 */ protected void canceling() {
/* 850 */ LicenseVerifier.VerificationJob.this.retrieveUIDRequest
/* 851 */ .abort();
/* 852 */ LicenseVerifier.VerificationJob.this.retrieveSubscriptionRequest
/* 853 */ .abort();
/* 854 */ super.canceling();
/* 855 */ }
/* 856 */ };
/* 857 */ local3.setSystem(true);
/* 858 */ final IWorkbench localIWorkbench = PlatformUI.getWorkbench();
/* 859 */ Display localDisplay = localIWorkbench.getDisplay();
/* 860 */ if ((localDisplay == null) || (localDisplay.isDisposed()))
/* 861 */ return;
/* 862 */ if (paramIProgressMonitor.isCanceled())
/* 863 */ return;
/* 864 */ localDisplay.syncExec(new Runnable() {
/* 865 */ public void run() {
/* 866 */ IWorkbenchWindow localIWorkbenchWindow = localIWorkbench
/* 867 */ .getActiveWorkbenchWindow();
/* 868 */ Shell localShell = localIWorkbenchWindow == null ? null :
/* 869 */ localIWorkbenchWindow.getShell();
/* 870 */ if ((localShell != null) && (localShell.isDisposed()))
/* 871 */ localShell = null;
/* 872 */ LicenseVerifier.VerificationJob.this.inputDialog = new ActivateProDialog(
/* 873 */ localShell,
/* 874 */ LicenseVerifier.VerificationJob.joinStr(LicenseVerifier.VerificationJob.this.actionNames),
/* 875 */ LicenseVerifier.VerificationJob.this.requiredStatus,
/* 876 */ LicenseVerifier.VerificationJob.this.validity
/* 877 */ .getCode(),
/* 878 */ localProperties,
/* 879 */ (LicenseVerifier.VerificationJob.this.style & 0x4) != 0,
/* 880 */ (LicenseVerifier.VerificationJob.this.style & 0x8) != 0,
/* 881 */ local1, local2, local3);
/* 882 */ int i = LicenseVerifier.VerificationJob.this.inputDialog
/* 883 */ .open();
/* 884 */ if (i == 1) {
/* 885 */ local1.cancel();
/* 886 */ local2.cancel();
/* 887 */ local3.cancel();
/* 888 */ LicenseVerifier.VerificationJob.this.cancel();
/* 889 */ paramIProgressMonitor.setCanceled(true);
/* 890 */ }
/* 891 */ }
/* 892 */ });
/* 893 */ if ((LicenseVerifier.hasValidity(this.validity, 1)) && (hasUser()) &&
/* 894 */ (hasAuthToken())) {
/* 895 */ long l = System.currentTimeMillis() + 604800L;
/* 896 */ InternalXMindNet.getInstance().getAccount()
/* 897 */ .signedIn(this.user, this.authToken, l, true);
/* 898 */ }
/* 899 */ }
/* 900 */
/* 901 */ private static String joinStr(Collection paramCollection) {
/* 902 */ StringBuffer localStringBuffer = new StringBuffer(
/* 903 */ paramCollection.size() * 10);
/* 904 */ Iterator localIterator = paramCollection.iterator();
/* 905 */ while (localIterator.hasNext()) {
/* 906 */ String str = (String)localIterator.next();
/* 907 */ if (localStringBuffer.length() > 0)
/* 908 */ localStringBuffer.append(", ");
/* 909 */ localStringBuffer.append(str);
/* 910 */ }
/* 911 */ return localStringBuffer.toString();
/* 912 */ }
/* 913 */
/* 914 */ private void loadInfoFromInput(Properties paramProperties) {
/* 915 */ this.licenseEmail = paramProperties.getProperty("licenseEmail");
/* 916 */ this.licenseKey = paramProperties.getProperty("licenseKey");
/* 917 */ this.user = paramProperties.getProperty("user");
/* 918 */ this.authToken = paramProperties.getProperty("token");
/* 919 */ }
/* 920 */
/* 921 */ private void retrieveSubscription(IProgressMonitor paramIProgressMonitor) {
/* 922 */ this.retrieveSubscriptionRequest
/* 923 */ .uri("/_res/verify/%s", new Object[] { this.user })
/* 924 */ .addHeader("UID", this.uid).get();
/* 925 */ if ((paramIProgressMonitor.isCanceled()) ||
/* 926 */ (this.retrieveSubscriptionRequest.isAborted()))
/* 927 */ return;
/* 928 */ int i = this.retrieveSubscriptionRequest.getCode();
/* 929 */ IDataStore localIDataStore = this.retrieveSubscriptionRequest
/* 930 */ .getData();
/* 931 */ if ((i == 200) && (localIDataStore != null)) {
/* 932 */ this.expiration = LicenseVerifier.extractExpiration(
/* 933 */ localIDataStore, this.uid);
/* 934 */ if (this.expiration == null)
/* 935 */ this.validity = LicenseVerifier.createValidity(4096);
/* 936 */ else
/* 937 */ this.validity = LicenseVerifier.createValidity(
/* 938 */ LicenseVerifier.parseExpiration(this.expiration,
/* 939 */ this.uid), this.user);
/* 940 */ } else if (this.retrieveUIDRequest.getException() != null) {
/* 941 */ this.validity = LicenseVerifier.createValidity(1073741824,
/* 942 */ this.retrieveUIDRequest.getException());
/* 943 */ } else if ((i >= 500) || (i < 400)) {
/* 944 */ this.validity = LicenseVerifier.createValidity(1073741824);
/* 945 */ }
/* 946 */ }
/* 947 */
/* 948 */ private void retrieveUID(IProgressMonitor paramIProgressMonitor) {
/* 949 */ this.retrieveUIDRequest
/* 950 */ .uri("/_res/uid/%s", new Object[] { this.user })
/* 951 */ .setAuthToken(this.authToken).get();
/* 952 */ if ((paramIProgressMonitor.isCanceled()) ||
/* 953 */ (this.retrieveUIDRequest.isAborted()))
/* 954 */ return;
/* 955 */ int i = this.retrieveUIDRequest.getCode();
/* 956 */ IDataStore localIDataStore = this.retrieveUIDRequest.getData();
/* 957 */ if ((i == 200) && (localIDataStore != null))
/* 958 */ this.uid = localIDataStore.getString("uid");
/* 959 */ else if (this.retrieveUIDRequest.getException() != null)
/* 960 */ this.validity = LicenseVerifier.createValidity(1073741824,
/* 961 */ this.retrieveUIDRequest.getException());
/* 962 */ else if ((i >= 500) || (i < 400))
/* 963 */ this.validity = LicenseVerifier.createValidity(1073741824);
/* 964 */ }
/* 965 */
/* 966 */ private boolean hasLicenseKey() {
/* 967 */ return (this.licenseKey != null) && (!"".equals(this.licenseKey));
/* 968 */ }
/* 969 */
/* 970 */ private boolean hasLicenseEmail()
/* 971 */ {
/* 972 */ return (this.licenseEmail != null) &&
/* 973 */ (!"".equals(this.licenseEmail));
/* 974 */ }
/* 975 */
/* 976 */ private boolean hasUser() {
/* 977 */ return (this.user != null) && (!"".equals(this.user));
/* 978 */ }
/* 979 */
/* 980 */ private boolean hasAuthToken() {
/* 981 */ return (this.authToken != null) && (!"".equals(this.authToken));
/* 982 */ }
/* 983 */
/* 984 */ private boolean hasUID() {
/* 985 */ return (this.uid != null) && (!"".equals(this.uid));
/* 986 */ }
/* 987 */
/* 988 */ private boolean hasExpiration() {
/* 989 */ return (this.expiration != null) && (!"".equals(this.expiration));
/* 990 */ }
/* 991 */
/* 992 */ protected void canceling() {
/* 993 */ this.retrieveUIDRequest.abort();
/* 994 */ this.retrieveSubscriptionRequest.abort();
/* 995 */ final ActivateProDialog localActivateProDialog = this.inputDialog;
/* 996 */ if (localActivateProDialog != null) {
/* 997 */ IWorkbench localIWorkbench = PlatformUI.getWorkbench();
/* 998 */ if (localIWorkbench != null) {
/* 999 */ final Display localDisplay = localIWorkbench.getDisplay();
/* 1000 */ if ((localDisplay != null) && (!localDisplay.isDisposed()))
/* 1001 */ localDisplay.asyncExec(new Runnable() {
/* 1002 */ public void run() {
/* 1003 */ if (localDisplay.isDisposed())
/* 1004 */ return;
/* 1005 */ localActivateProDialog.close();
/* 1006 */ }
/* 1007 */ });
/* 1008 */ }
/* 1009 */ }
/* 1010 */ super.canceling();
/* 1011 */ }
/* 1012 */ }
/* 1013 */ }
6. Create build environment for ant with build.xml (build.xml should be created in ~/xmind.verify/ folder) as below
- ~/xmind.verify/build.xml Select all
<?xml version="1.0" encoding="UTF-8"?>
<project basedir="." default="jar">
<!--ant build file to recompile jar-->
<property environment="env"/>
<property name="project.base.dir" value="."/>
<property name="xmind.class.path" value="/Applications/XMind.app/Contents/Resources/plugins"/>
<property name="name" value="net.xmind.verify_3.3.0.201208102038"/>
<property name="javafilename" value="LicenseVerifier"/>
<property name="app.dir" value="/Applications/XMind.app/Contents/Resources/plugins" />
<property name="src" value="${project.base.dir}/src"/>
<property name="test" value="${project.base.dir}/test"/>
<property name="reference" value="${project.base.dir}/lib"/>
<property name="build" value="${project.base.dir}/build"/>
<property name="classes" value="${build}/classes"/>
<property name="lib" value="${build}/lib"/>
<path id="reference.class.path">
<pathelement path="${java.class.path}" />
<fileset dir="${reference}">
<include name="*.jar" />
</fileset>
<fileset dir="${xmind.class.path}" includes="*.jar"/>
</path>
<target name="init">
<mkdir dir="${build}"/>
<mkdir dir="${classes}"/>
<mkdir dir="${lib}"/>
</target>
<target depends="init" name="pre.compile.test">
</target>
<target depends="pre.compile.test" name="compile.src">
<javac debug="on" memoryMaximumSize="256m" memoryInitialSize="256m" fork="true" includeantruntime="false" destdir="${classes}" srcdir="${src}">
<classpath refid="reference.class.path" />
<compilerarg value="-Xlint:unchecked"/>
</javac>
</target>
<target depends="compile.src" name="compile.test">
<javac debug="on" memoryMaximumSize="256m" memoryInitialSize="256m" fork="true" includeantruntime="false" destdir="${classes}">
<src path="${test}"/>
<classpath refid="reference.class.path" />
<compilerarg value="-Xlint:unchecked"/>
</javac>
</target>
<target depends="compile.src" name="jar">
<echo>=== BUILDING ${name}.jar ===</echo>
<jar destfile="${lib}/${name}.jar">
<zipfileset src="${reference}/${name}.jar" excludes="**/${javafilename}*.class"/>
<fileset dir="${classes}" excludes="**/Test.class"/>
</jar>
</target>
<!-- INSTALL -->
<target name="install" depends="jar">
<echo>=== INSTALLING ${name}.jar ===</echo>
<copy file="${lib}/${name}.jar" tofile="${app.dir}/${name}.jar" overwrite="true" />
</target>
<target name="clean">
<delete dir="${build}"/>
</target>
</project>
7. ant clean & build
cd ~/xmind.verify
ant clean jar
8. Update jar file and install to App folder
cd ~/xmind.verify/
ant install
P.S. this is how to add line numbers to the source code and then convert the angle brackets for this blog.
awk '{printf("/* %3d */ %s\n", NR,$0)}' filename | sed 's/</\</g;s/>/\>/g' > filenamenumbered.txt
No comments:
Post a Comment