Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@ public class Messages
FindWidget,
Grid,
InstallExampleDisplays,
HashPassword_button,
LoadDisplay,
LoadDisplay_TT,
MacroEditButton,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
* http://www.eclipse.org/legal/epl-v10.html
*******************************************************************************/
package org.csstudio.display.builder.editor.properties;
import org.csstudio.display.builder.model.properties.HashPasswordProperty;

import javafx.event.ActionEvent;
import javafx.event.EventHandler;
Expand Down Expand Up @@ -545,6 +546,31 @@ public void bind() {

field = points_field;
}
else if (property instanceof HashPasswordProperty) {
final Button hashButton = new Button(Messages.HashPassword_button);
hashButton.setMnemonicParsing(false);
hashButton.setMaxWidth(Double.MAX_VALUE);

hashButton.setOnAction(event -> {
final WidgetProperty<String> passwordProperty =
(WidgetProperty<String>) widget.getProperty("password");

if (passwordProperty == null)
return;

final String password = passwordProperty.getValue();

if (password == null || password.isEmpty())
return;

undo.execute(new SetMacroizedWidgetPropertyAction(
(MacroizedWidgetProperty<String>) passwordProperty,
HashPasswordProperty.crypt(password)
));
});

field = hashButton;
}
return field;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ FilePath=File Path
FindWidget=Find Widget...
Grid=Align widgets to Grid
InstallExampleDisplays=Install Example Displays
HashPassword_button=Compute hash
LoadDisplay=Load display
LoadDisplay_TT=Load display
MacroEditButton=Edit Macros
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ FilePath=Chemin du fichier
FindWidget=Trouver un widget...
Grid=Aligner les widgets sur la grille
InstallExampleDisplays=Installer exemples d'affichages
HashPassword_button=Calculer hash
LoadDisplay=Charger l'affichage
LoadDisplay_TT=Charger l'affichage
MacroEditButton=Modifier les macros
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@ public class Messages
GroupWidget_Description,
GroupWidget_Name,
HighlightActiveRegion,
InformativeTooltipHashPassword,
InformativeTooltipActions,
InformativeTooltipAlarmBorder,
InformativeTooltipHeight,
Expand Down Expand Up @@ -236,6 +237,7 @@ public class Messages
WidgetProperties_GridStepX,
WidgetProperties_GridStepY,
WidgetProperties_GridVisible,
WidgetProperties_HashPassword,
WidgetProperties_Height,
WidgetProperties_HeightPVName,
WidgetProperties_HighlightBar,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -771,6 +771,22 @@ public EnumWidgetProperty<ConfirmDialog> createProperty(final Widget widget, fin
public static final WidgetPropertyDescriptor<String> propPassword =
newStringPropertyDescriptor(WidgetPropertyCategory.BEHAVIOR, "password", Messages.WidgetProperties_Password);


public static final WidgetPropertyDescriptor<String> propHashPassword =
new WidgetPropertyDescriptor<>(WidgetPropertyCategory.BEHAVIOR, "hash_password", Messages.WidgetProperties_HashPassword)
{
@Override
public WidgetProperty<String> createProperty(
final Widget widget,
final String default_value)
{
return new HashPasswordProperty(
this,
widget,
default_value);
}
};

/**
* Runtime 'pv_value' property: Typically read from primary PV
*/
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
package org.csstudio.display.builder.model.properties;

import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;

import org.csstudio.display.builder.model.Widget;
import org.csstudio.display.builder.model.WidgetProperty;
import org.csstudio.display.builder.model.WidgetPropertyDescriptor;
import org.csstudio.display.builder.model.persist.ModelReader;
import org.csstudio.display.builder.model.persist.ModelWriter;
import org.phoebus.framework.persistence.XMLUtil;
import org.w3c.dom.Element;

import javax.xml.stream.XMLStreamWriter;

@SuppressWarnings("nls")
public class HashPasswordProperty extends WidgetProperty<String>
{
public HashPasswordProperty(
final WidgetPropertyDescriptor<String> descriptor,
final Widget widget,
final String default_value)
{
super(descriptor, widget, default_value);
}

@Override
public void setValueFromObject(final Object value)
{
if (value == null)
setValue("");
else
setValue(value.toString());
}

@Override
public void writeToXML(final ModelWriter model_writer,

Check warning on line 37 in app/display/model/src/main/java/org/csstudio/display/builder/model/properties/HashPasswordProperty.java

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Rename this local variable to match the regular expression '^[a-z][a-zA-Z0-9]*$'.

See more on https://sonarcloud.io/project/issues?id=ControlSystemStudio_phoebus&issues=AaGMcMhmzmCGR9wbRlIb&open=AaGMcMhmzmCGR9wbRlIb&pullRequest=3924
final XMLStreamWriter writer) throws Exception
{
writer.writeCharacters(value);
}

@Override
public void readFromXML(final ModelReader model_reader,

Check warning on line 44 in app/display/model/src/main/java/org/csstudio/display/builder/model/properties/HashPasswordProperty.java

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Rename this local variable to match the regular expression '^[a-z][a-zA-Z0-9]*$'.

See more on https://sonarcloud.io/project/issues?id=ControlSystemStudio_phoebus&issues=AaGMcMhmzmCGR9wbRlIc&open=AaGMcMhmzmCGR9wbRlIc&pullRequest=3924
final Element property_xml) throws Exception

Check warning on line 45 in app/display/model/src/main/java/org/csstudio/display/builder/model/properties/HashPasswordProperty.java

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Rename this local variable to match the regular expression '^[a-z][a-zA-Z0-9]*$'.

See more on https://sonarcloud.io/project/issues?id=ControlSystemStudio_phoebus&issues=AaGMcMhmzmCGR9wbRlId&open=AaGMcMhmzmCGR9wbRlId&pullRequest=3924
{
setValue(XMLUtil.getString(property_xml));
}

public static String crypt(final String password)
{
if (password == null || password.isEmpty())
return password;

try
{
final MessageDigest md = MessageDigest.getInstance("SHA-256");
final byte[] hash =
md.digest(password.getBytes(StandardCharsets.UTF_8));

final StringBuilder hex = new StringBuilder(hash.length * 2);

for (final byte b : hash)
hex.append(String.format("%02x", b));

return hex.toString();
}
catch (Exception e)
{
throw new RuntimeException("Unable to hash password", e);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
import org.csstudio.display.builder.model.properties.MacrosWidgetProperty;
import org.csstudio.display.builder.model.properties.ActionsWidgetProperty;
import org.csstudio.display.builder.model.properties.RulesWidgetProperty;
import org.csstudio.display.builder.model.properties.HashPasswordProperty;
import org.csstudio.display.builder.model.properties.ScriptPV;
import org.csstudio.display.builder.model.properties.ScriptsWidgetProperty;

Expand Down Expand Up @@ -213,7 +214,8 @@ static public List<PropInfo> getTargettableProperties(final Widget attached_widg
if ((prop instanceof MacrosWidgetProperty) ||
(prop instanceof ActionsWidgetProperty) ||
(prop instanceof ScriptsWidgetProperty) ||
(prop instanceof RulesWidgetProperty))
(prop instanceof RulesWidgetProperty) ||
(prop instanceof HashPasswordProperty))
continue;

for (String name : Widget.expandPropertyNames(prop))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
import static org.csstudio.display.builder.model.properties.CommonWidgetProperties.propEnabled;
import static org.csstudio.display.builder.model.properties.CommonWidgetProperties.propFont;
import static org.csstudio.display.builder.model.properties.CommonWidgetProperties.propForegroundColor;
import static org.csstudio.display.builder.model.properties.CommonWidgetProperties.propHashPassword;
import static org.csstudio.display.builder.model.properties.CommonWidgetProperties.propHorizontalAlignment;
import static org.csstudio.display.builder.model.properties.CommonWidgetProperties.propVerticalAlignment;
import static org.csstudio.display.builder.model.properties.CommonWidgetProperties.propPassword;
Expand All @@ -25,6 +26,7 @@
import java.util.List;

import org.csstudio.display.builder.model.MacroizedWidgetProperty;
import org.csstudio.display.builder.model.Messages;
import org.csstudio.display.builder.model.Version;
import org.csstudio.display.builder.model.Widget;
import org.csstudio.display.builder.model.WidgetCategory;
Expand Down Expand Up @@ -237,7 +239,7 @@
private volatile WidgetProperty<Boolean> confirm_dialog;
private volatile WidgetProperty<String> confirm_message;
private volatile WidgetProperty<String> password;

private volatile WidgetProperty<String> hash_password;

Check warning on line 242 in app/display/model/src/main/java/org/csstudio/display/builder/model/widgets/ActionButtonWidget.java

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Rename this field "hash_password" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.

See more on https://sonarcloud.io/project/issues?id=ControlSystemStudio_phoebus&issues=AaEcFOdvkaFsZPR4Zroa&open=AaEcFOdvkaFsZPR4Zroa&pullRequest=3924
/** Constructor */
public ActionButtonWidget()
{
Expand Down Expand Up @@ -271,6 +273,8 @@
properties.add(confirm_dialog = propConfirmDialog.createProperty(this, false));
properties.add(confirm_message = propConfirmMessage.createProperty(this, "Are your sure you want to do this?"));
properties.add(password = propPassword.createProperty(this, ""));
properties.add(hash_password = propHashPassword.createProperty(this, ""));

Check warning on line 276 in app/display/model/src/main/java/org/csstudio/display/builder/model/widgets/ActionButtonWidget.java

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Extract the assignment out of this expression.

See more on https://sonarcloud.io/project/issues?id=ControlSystemStudio_phoebus&issues=AaEcFOdvkaFsZPR4ZroZ&open=AaEcFOdvkaFsZPR4ZroZ&pullRequest=3924
hash_password.setInformativeTooltip(Messages.InformativeTooltipHashPassword);
}

@Override
Expand Down Expand Up @@ -310,13 +314,13 @@
{
return transparent;
}

/** @return 'horizontal_alignment' property */
public WidgetProperty<HorizontalAlignment> propHorizontalAlignment()
{
return horizontal_alignment;
}

/** @return 'vertical_alignment' property */
public WidgetProperty<VerticalAlignment> propVerticalAlignment()
{
Expand Down Expand Up @@ -353,9 +357,16 @@
return confirm_message;
}

/** @return 'hash_password' property */
public WidgetProperty<String> propHashPassword()
{
return hash_password;
}

/** @return 'password' property */
public WidgetProperty<String> propPassword()
{
return password;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
import static org.csstudio.display.builder.model.properties.CommonWidgetProperties.propEnabled;
import static org.csstudio.display.builder.model.properties.CommonWidgetProperties.propFont;
import static org.csstudio.display.builder.model.properties.CommonWidgetProperties.propForegroundColor;
import static org.csstudio.display.builder.model.properties.CommonWidgetProperties.propHashPassword;
import static org.csstudio.display.builder.model.properties.CommonWidgetProperties.propHorizontalAlignment;
import static org.csstudio.display.builder.model.properties.CommonWidgetProperties.propVerticalAlignment;
import static org.csstudio.display.builder.model.properties.CommonWidgetProperties.propLabelsFromPV;
Expand Down Expand Up @@ -182,6 +183,7 @@
private volatile WidgetProperty<ConfirmDialog> confirm_dialog;
private volatile WidgetProperty<String> confirm_message;
private volatile WidgetProperty<String> password;
private volatile WidgetProperty<String> hash_password;

Check warning on line 186 in app/display/model/src/main/java/org/csstudio/display/builder/model/widgets/BoolButtonWidget.java

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Rename this field "hash_password" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.

See more on https://sonarcloud.io/project/issues?id=ControlSystemStudio_phoebus&issues=AaEcFOYXkaFsZPR4ZroU&open=AaEcFOYXkaFsZPR4ZroU&pullRequest=3924

/** Constructor */
public BoolButtonWidget()
Expand All @@ -200,6 +202,7 @@
protected void defineProperties(final List<WidgetProperty<?>> properties)
{
super.defineProperties(properties);

properties.add(bit = propBit.createProperty(this, 0));
properties.add(off_label = propOffLabel.createProperty(this, "Off"));
properties.add(off_color = propOffColor.createProperty(this, new WidgetColor(60, 100, 60)));
Expand All @@ -219,6 +222,8 @@
properties.add(confirm_dialog = propConfirmDialogOptions.createProperty(this, ConfirmDialog.NONE));
properties.add(confirm_message = propConfirmMessage.createProperty(this, "Are your sure you want to do this?"));
properties.add(password = propPassword.createProperty(this, ""));
properties.add(hash_password = propHashPassword.createProperty(this, ""));

Check warning on line 225 in app/display/model/src/main/java/org/csstudio/display/builder/model/widgets/BoolButtonWidget.java

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Extract the assignment out of this expression.

See more on https://sonarcloud.io/project/issues?id=ControlSystemStudio_phoebus&issues=AaEcFOYXkaFsZPR4ZroT&open=AaEcFOYXkaFsZPR4ZroT&pullRequest=3924
hash_password.setInformativeTooltip(Messages.InformativeTooltipHashPassword);
}

/** @return 'bit' property */
Expand Down Expand Up @@ -286,13 +291,13 @@
{
return foreground;
}

/** @return 'horizontal_alignment' property */
public WidgetProperty<HorizontalAlignment> propHorizontalAlignment()
{
return horizontal_alignment;
}

/** @return 'vertical_alignment' property */
public WidgetProperty<VerticalAlignment> propVerticalAlignment()
{
Expand Down Expand Up @@ -334,4 +339,10 @@
{
return password;
}

/** @return 'hash_password' property */
public WidgetProperty<String> propHashPassword()
{
return hash_password;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
import static org.csstudio.display.builder.model.properties.CommonWidgetProperties.propEnabled;
import static org.csstudio.display.builder.model.properties.CommonWidgetProperties.propFont;
import static org.csstudio.display.builder.model.properties.CommonWidgetProperties.propForegroundColor;
import static org.csstudio.display.builder.model.properties.CommonWidgetProperties.propHashPassword;
import static org.csstudio.display.builder.model.properties.CommonWidgetProperties.propPassword;

import java.util.Arrays;
Expand Down Expand Up @@ -73,6 +74,7 @@
private volatile WidgetProperty<ConfirmDialog> confirm_dialog;
private volatile WidgetProperty<String> confirm_message;
private volatile WidgetProperty<String> password;
private volatile WidgetProperty<String> hash_password;

Check warning on line 77 in app/display/model/src/main/java/org/csstudio/display/builder/model/widgets/CheckBoxWidget.java

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Rename this field "hash_password" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.

See more on https://sonarcloud.io/project/issues?id=ControlSystemStudio_phoebus&issues=AaEcFOhSkaFsZPR4Zroe&open=AaEcFOhSkaFsZPR4Zroe&pullRequest=3924

@Override
protected void defineProperties(final List<WidgetProperty<?>> properties)
Expand All @@ -87,6 +89,8 @@
properties.add(confirm_dialog = propConfirmDialogOptions.createProperty(this, ConfirmDialog.NONE));
properties.add(confirm_message = propConfirmMessage.createProperty(this, "Are your sure you want to do this?"));
properties.add(password = propPassword.createProperty(this, ""));
properties.add(hash_password = propHashPassword.createProperty(this, ""));

Check warning on line 92 in app/display/model/src/main/java/org/csstudio/display/builder/model/widgets/CheckBoxWidget.java

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Extract the assignment out of this expression.

See more on https://sonarcloud.io/project/issues?id=ControlSystemStudio_phoebus&issues=AaEcFOhSkaFsZPR4Zrod&open=AaEcFOhSkaFsZPR4Zrod&pullRequest=3924
hash_password.setInformativeTooltip(Messages.InformativeTooltipHashPassword);
}

/** Constructor */
Expand Down Expand Up @@ -148,4 +152,11 @@
{
return password;
}

/** @return 'hash_password' property */
public WidgetProperty<String> propHashPassword()
{
return hash_password;
}

}
Loading
Loading