diff --git a/python/ipnb/src/org/jetbrains/plugins/ipnb/configuration/IpnbConfigurable.form b/python/ipnb/src/org/jetbrains/plugins/ipnb/configuration/IpnbConfigurable.form index bb094c529790..62bcbb739ba5 100644 --- a/python/ipnb/src/org/jetbrains/plugins/ipnb/configuration/IpnbConfigurable.form +++ b/python/ipnb/src/org/jetbrains/plugins/ipnb/configuration/IpnbConfigurable.form @@ -1,6 +1,6 @@
- + @@ -107,7 +107,7 @@ - + @@ -118,6 +118,27 @@ + + + + + + + + + + + + + + + + + + + + +
diff --git a/python/ipnb/src/org/jetbrains/plugins/ipnb/configuration/IpnbConfigurable.java b/python/ipnb/src/org/jetbrains/plugins/ipnb/configuration/IpnbConfigurable.java index f2e71742e9c6..616e7c614961 100644 --- a/python/ipnb/src/org/jetbrains/plugins/ipnb/configuration/IpnbConfigurable.java +++ b/python/ipnb/src/org/jetbrains/plugins/ipnb/configuration/IpnbConfigurable.java @@ -7,11 +7,16 @@ import com.intellij.openapi.options.SearchableConfigurable; import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.TextFieldWithBrowseButton; import com.intellij.openapi.util.text.StringUtil; +import com.intellij.ui.JBColor; +import com.intellij.ui.components.JBLabel; import com.intellij.ui.components.JBTextField; import org.jetbrains.annotations.Nls; import org.jetbrains.annotations.NotNull; import javax.swing.*; +import java.awt.*; +import java.awt.event.FocusAdapter; +import java.awt.event.FocusEvent; public class IpnbConfigurable implements SearchableConfigurable { private JPanel myMainPanel; @@ -20,17 +25,47 @@ public class IpnbConfigurable implements SearchableConfigurable { private JBTextField myArgumentsField; private JPasswordField myPasswordField; private JBTextField myUsernameField; + private JBLabel myWarningLabel; @NotNull private final Project myProject; public IpnbConfigurable(@NotNull Project project) { myProject = project; + myWarningLabel.setForeground(new JBColor(new Color(164, 145, 52), new Color(187, 181, 41))); final FileChooserDescriptor fileChooserDescriptor = FileChooserDescriptorFactory.createSingleFolderDescriptor(); myWorkingDirField.addBrowseFolderListener("Select Working Directory", null, myProject, fileChooserDescriptor); myFieldUrl.setText(IpnbSettings.getInstance(myProject).getURL()); + myFieldUrl.addFocusListener(createUrlProtocolValidationListener()); + myUsernameField.addFocusListener(createUrlProtocolValidationListener()); + myPasswordField.addFocusListener(createUrlProtocolValidationListener()); myWorkingDirField.setText(IpnbSettings.getInstance(myProject).getWorkingDirectory()); myArgumentsField.setText(IpnbSettings.getInstance(myProject).getArguments()); } + @NotNull + private FocusAdapter createUrlProtocolValidationListener() { + return new FocusAdapter() { + @Override + public void focusLost(FocusEvent e) { + setWarningLabelText(); + } + }; + } + + private void setWarningLabelText() { + final boolean isRemote = !myUsernameField.getText().isEmpty() && myPasswordField.getPassword().length > 0; + final String url = myFieldUrl.getText(); + if (isRemote && !url.startsWith("https")) { + myWarningLabel.setText("Only HTTPS urls are supported in remote notebooks"); + return; + } + if (!isRemote && url.startsWith("https")) { + myWarningLabel.setText("Only HTTP urls are supported in local notebooks"); + return; + } + + myWarningLabel.setText(""); + } + @Nls @Override public String getDisplayName() { @@ -98,6 +133,8 @@ public class IpnbConfigurable implements SearchableConfigurable { myArgumentsField.setText(IpnbSettings.getInstance(myProject).getArguments()); myUsernameField.setText(IpnbSettings.getInstance(myProject).getUsername()); myPasswordField.setText(IpnbSettings.getInstance(myProject).getPassword()); + + setWarningLabelText(); } @Override diff --git a/python/ipnb/src/org/jetbrains/plugins/ipnb/protocol/IpnbConnection.java b/python/ipnb/src/org/jetbrains/plugins/ipnb/protocol/IpnbConnection.java index 0051603b9d21..db39d22d7ec6 100644 --- a/python/ipnb/src/org/jetbrains/plugins/ipnb/protocol/IpnbConnection.java +++ b/python/ipnb/src/org/jetbrains/plugins/ipnb/protocol/IpnbConnection.java @@ -94,8 +94,13 @@ public class IpnbConnection { myProject = project; myCookieManager = new CookieManager(); CookieHandler.setDefault(myCookieManager); - if (!isRemote() && !myURI.getScheme().equals("http")) { - throw new UnsupportedOperationException("Only http urls are supported for local notebooks"); + if (!isRemote()) { + if (!myURI.getScheme().equals("http")) { + throw new UnsupportedOperationException("Only http urls are supported for local notebooks"); + } + } + else if (!myURI.getScheme().equals("https")) { + throw new UnsupportedOperationException("Only https urls are supported for remote notebooks"); } initXSRF(myURI.toString());