ghidra/GhidraBuild/EclipsePlugins/GhidraDev/GhidraDevPlugin/src/main/java/ghidradev/GhidraDevStartup.java
2019-03-26 13:46:51 -04:00

79 lines
2.8 KiB
Java

/* ###
* IP: GHIDRA
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package ghidradev;
import org.eclipse.core.runtime.*;
import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.*;
import org.eclipse.ui.intro.IIntroManager;
import org.eclipse.ui.intro.IIntroPart;
import ghidradev.ghidrascripteditor.ScriptEditorInitializer;
import ghidradev.ghidrasymbollookup.SymbolLookupInitializer;
/**
* When Eclipse starts, initializes the plugin's subcomponents.
*/
public class GhidraDevStartup implements IStartup {
@Override
public void earlyStartup() {
Job job = new Job(Activator.PLUGIN_ID + " startup") {
@Override
protected IStatus run(IProgressMonitor monitor) {
monitor.beginTask("Initializing " + Activator.PLUGIN_ID, 2);
// If we were launched from Ghidra, close the Eclipse welcome screen if present,
// and make it so it never shows up again.
if (Activator.getDefault().isLaunchedByGhidra()) {
IIntroManager introManager = PlatformUI.getWorkbench().getIntroManager();
IIntroPart intro = introManager.getIntro();
if (intro != null) {
Display.getDefault().syncExec(() -> introManager.closeIntro(intro));
}
PlatformUI.getPreferenceStore().setValue(
IWorkbenchPreferenceConstants.SHOW_INTRO, false);
}
// Ask the user (only once) for consent before listening on any ports
boolean firstTimeConsent = false;
if (!GhidraRootPreferences.requestedConsentToOpenPorts()) {
firstTimeConsent = EclipseMessageUtils.showQuestionDialog(
Activator.PLUGIN_ID + "User Consent",
Activator.PLUGIN_ID + " opens ports to enable communication with Ghidra " +
"for various features such as initiating script editing and symbol " +
"lookup from Ghidra.\n\nDo you consent to the ports being opened?\n\n" +
"If you do not consent now, you can enable these features at any " +
"time in the " + Activator.PLUGIN_ID + " preferences.");
GhidraRootPreferences.setOpenPortConsentRequest(true);
}
// Initialize the script editor
ScriptEditorInitializer.init(firstTimeConsent);
monitor.worked(1);
// Initialize symbol lookup
SymbolLookupInitializer.init(firstTimeConsent);
monitor.worked(1);
monitor.done();
return Status.OK_STATUS;
}
};
job.schedule();
}
}