mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
PY-14605 Add settings for remote notebook: username and password
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<form xmlns="http://www.intellij.com/uidesigner/form/" version="1" bind-to-class="org.jetbrains.plugins.ipnb.configuration.IpnbConfigurable">
|
||||
<grid id="27dc6" binding="myMainPanel" layout-manager="GridLayoutManager" row-count="1" column-count="1" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
|
||||
<grid id="27dc6" binding="myMainPanel" layout-manager="GridLayoutManager" row-count="4" column-count="2" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
|
||||
<margin top="0" left="0" bottom="0" right="0"/>
|
||||
<constraints>
|
||||
<xy x="20" y="20" width="657" height="302"/>
|
||||
@@ -11,7 +11,7 @@
|
||||
<grid id="6ed7f" layout-manager="GridLayoutManager" row-count="3" column-count="2" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
|
||||
<margin top="0" left="0" bottom="0" right="0"/>
|
||||
<constraints>
|
||||
<grid row="0" column="0" row-span="1" col-span="1" vsize-policy="3" hsize-policy="3" anchor="1" fill="1" indent="0" use-parent-layout="false"/>
|
||||
<grid row="0" column="0" row-span="1" col-span="2" vsize-policy="3" hsize-policy="3" anchor="1" fill="1" indent="0" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
<properties/>
|
||||
<border type="none"/>
|
||||
@@ -41,7 +41,8 @@
|
||||
<grid row="1" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
<properties>
|
||||
<text value="Working directory:"/>
|
||||
<labelFor value="24f12"/>
|
||||
<text value="&Working directory:"/>
|
||||
</properties>
|
||||
</component>
|
||||
<component id="97534" class="com.intellij.ui.components.JBTextField" binding="myArgumentsField">
|
||||
@@ -60,6 +61,63 @@
|
||||
</component>
|
||||
</children>
|
||||
</grid>
|
||||
<grid id="18b6b" layout-manager="GridLayoutManager" row-count="2" column-count="2" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
|
||||
<margin top="0" left="0" bottom="0" right="0"/>
|
||||
<constraints>
|
||||
<grid row="2" column="0" row-span="1" col-span="2" vsize-policy="3" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
<properties/>
|
||||
<border type="none">
|
||||
<font/>
|
||||
<color color="-4539718"/>
|
||||
</border>
|
||||
<children>
|
||||
<component id="85ddd" class="com.intellij.ui.components.JBLabel">
|
||||
<constraints>
|
||||
<grid row="1" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="0" fill="0" indent="0" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
<properties>
|
||||
<labelFor value="39ad9"/>
|
||||
<text value="&Password"/>
|
||||
</properties>
|
||||
</component>
|
||||
<component id="5fd16" class="com.intellij.ui.components.JBLabel">
|
||||
<constraints>
|
||||
<grid row="0" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="0" fill="0" indent="0" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
<properties>
|
||||
<text value="&Username"/>
|
||||
</properties>
|
||||
</component>
|
||||
<component id="39ad9" class="javax.swing.JPasswordField" binding="myPasswordField">
|
||||
<constraints>
|
||||
<grid row="1" column="1" row-span="1" col-span="1" vsize-policy="0" hsize-policy="6" anchor="8" fill="1" indent="0" use-parent-layout="false">
|
||||
<preferred-size width="150" height="-1"/>
|
||||
</grid>
|
||||
</constraints>
|
||||
<properties/>
|
||||
</component>
|
||||
<component id="a47cd" class="com.intellij.ui.components.JBTextField" binding="myUsernameField">
|
||||
<constraints>
|
||||
<grid row="0" column="1" row-span="1" col-span="1" vsize-policy="3" hsize-policy="3" anchor="0" fill="1" indent="0" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
<properties/>
|
||||
</component>
|
||||
</children>
|
||||
</grid>
|
||||
<vspacer id="9a11e">
|
||||
<constraints>
|
||||
<grid row="3" column="0" row-span="1" col-span="2" vsize-policy="6" hsize-policy="1" anchor="0" fill="2" indent="0" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
</vspacer>
|
||||
<component id="b88d4" class="com.intellij.ui.TitledSeparator">
|
||||
<constraints>
|
||||
<grid row="1" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
<properties>
|
||||
<text value="SSH"/>
|
||||
</properties>
|
||||
</component>
|
||||
</children>
|
||||
</grid>
|
||||
</form>
|
||||
|
||||
@@ -18,12 +18,13 @@ public class IpnbConfigurable implements SearchableConfigurable {
|
||||
private JBTextField myFieldUrl;
|
||||
private TextFieldWithBrowseButton myWorkingDirField;
|
||||
private JBTextField myArgumentsField;
|
||||
private JPasswordField myPasswordField;
|
||||
private JBTextField myUsernameField;
|
||||
@NotNull private final Project myProject;
|
||||
|
||||
public IpnbConfigurable(@NotNull Project project) {
|
||||
myProject = project;
|
||||
final FileChooserDescriptor fileChooserDescriptor = FileChooserDescriptorFactory
|
||||
.createSingleFolderDescriptor();
|
||||
final FileChooserDescriptor fileChooserDescriptor = FileChooserDescriptorFactory.createSingleFolderDescriptor();
|
||||
myWorkingDirField.addBrowseFolderListener("Select Working Directory", null, myProject, fileChooserDescriptor);
|
||||
myFieldUrl.setText(IpnbSettings.getInstance(myProject).getURL());
|
||||
myWorkingDirField.setText(IpnbSettings.getInstance(myProject).getWorkingDirectory());
|
||||
@@ -56,7 +57,18 @@ public class IpnbConfigurable implements SearchableConfigurable {
|
||||
final String workingDirectory = StringUtil.notNullize(myWorkingDirField.getText());
|
||||
final String arguments = StringUtil.notNullize(myArgumentsField.getText());
|
||||
|
||||
return !url.equals(oldUrl) || !workingDirectory.equals(oldWorkingDirectory) || !arguments.equals(oldArguments);
|
||||
return !url.equals(oldUrl) || !workingDirectory.equals(oldWorkingDirectory) || !arguments.equals(oldArguments)
|
||||
|| isCredentialsModified();
|
||||
}
|
||||
|
||||
public boolean isCredentialsModified() {
|
||||
final String oldUsername = StringUtil.notNullize(IpnbSettings.getInstance(myProject).getUsername());
|
||||
final String oldPassword = IpnbSettings.getInstance(myProject).getPassword();
|
||||
|
||||
final String username = StringUtil.notNullize(myUsernameField.getText());
|
||||
final String password = StringUtil.notNullize(String.valueOf(myPasswordField.getPassword()));
|
||||
|
||||
return !oldUsername.equals(username) || !oldPassword.equals(password);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -66,6 +78,11 @@ public class IpnbConfigurable implements SearchableConfigurable {
|
||||
IpnbSettings.getInstance(myProject).setURL(url);
|
||||
IpnbSettings.getInstance(myProject).setWorkingDirectory(myWorkingDirField.getText());
|
||||
IpnbSettings.getInstance(myProject).setArguments(myArgumentsField.getText());
|
||||
|
||||
if (isCredentialsModified()) {
|
||||
IpnbSettings.getInstance(myProject).setUsername(myUsernameField.getText());
|
||||
IpnbSettings.getInstance(myProject).setPassword(String.valueOf(myPasswordField.getPassword()));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -73,6 +90,8 @@ public class IpnbConfigurable implements SearchableConfigurable {
|
||||
myFieldUrl.setText(IpnbSettings.getInstance(myProject).getURL());
|
||||
myWorkingDirField.setText(IpnbSettings.getInstance(myProject).getWorkingDirectory());
|
||||
myArgumentsField.setText(IpnbSettings.getInstance(myProject).getArguments());
|
||||
myUsernameField.setText(IpnbSettings.getInstance(myProject).getUsername());
|
||||
myPasswordField.setText(IpnbSettings.getInstance(myProject).getPassword());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
package org.jetbrains.plugins.ipnb.configuration;
|
||||
|
||||
import com.intellij.ide.passwordSafe.PasswordSafe;
|
||||
import com.intellij.openapi.components.PersistentStateComponent;
|
||||
import com.intellij.openapi.components.ServiceManager;
|
||||
import com.intellij.openapi.components.State;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.util.xmlb.XmlSerializerUtil;
|
||||
import com.intellij.util.xmlb.annotations.Transient;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
@@ -11,10 +13,12 @@ import org.jetbrains.annotations.Nullable;
|
||||
|
||||
@State(name = "IpnbSettings")
|
||||
public class IpnbSettings implements PersistentStateComponent<IpnbSettings> {
|
||||
private static final String IPNB_PASSWORD_KEY = "IPNB_SSH_SETTINGS_PASSWORD_KEY";
|
||||
public static final String DEFAULT_URL = "http://127.0.0.1:8888";
|
||||
public String URL = DEFAULT_URL;
|
||||
private String myWorkingDirectory;
|
||||
private String myArguments = "";
|
||||
private String myUsername;
|
||||
|
||||
public static IpnbSettings getInstance(@NotNull Project project) {
|
||||
return ServiceManager.getService(project, IpnbSettings.class);
|
||||
@@ -45,6 +49,30 @@ public class IpnbSettings implements PersistentStateComponent<IpnbSettings> {
|
||||
public void setArguments(String arguments) {
|
||||
myArguments = arguments;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public String getUsername() {
|
||||
return StringUtil.notNullize(myUsername);
|
||||
}
|
||||
|
||||
public void setUsername(@Nullable String username) {
|
||||
myUsername = username;
|
||||
}
|
||||
|
||||
@Transient
|
||||
@NotNull
|
||||
public String getPassword() {
|
||||
final String username = getUsername();
|
||||
if (StringUtil.isEmptyOrSpaces(username)) return "";
|
||||
return StringUtil.notNullize(PasswordSafe.getInstance().getPassword(IpnbSettings.class, IPNB_PASSWORD_KEY + username));
|
||||
}
|
||||
|
||||
@Transient
|
||||
public void setPassword(@NotNull String password) {
|
||||
final String username = getUsername();
|
||||
if (password.isEmpty() || username.isEmpty()) return;
|
||||
PasswordSafe.getInstance().setPassword(IpnbSettings.class, IPNB_PASSWORD_KEY + username, password);
|
||||
}
|
||||
|
||||
@Override
|
||||
public IpnbSettings getState() {
|
||||
|
||||
Reference in New Issue
Block a user