-
Notifications
You must be signed in to change notification settings - Fork 1
C4G BLIS Spring 2026: Self-update & password reset #67
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Changes from 58 commits
Commits
Show all changes
73 commits
Select commit
Hold shift + click to select a range
2fece03
initial prototype:add password reset dialog
ranjinikrishnan a9c6ed1
add manual workflow trigger
ranjinikrishnan 9b0ab95
trigger built for prototype
ranjinikrishnan dab676a
trigger build
ranjinikrishnan c9dc7b0
add workflow dispatch trigger
ranjinikrishnan f678c45
feat: wire up password reset DB call via MySqlAdmin CLI
ranjinikrishnan 0a2a3cb
feat: password reset backend logic
ranjinikrishnan bd16bc5
working button
3c7a6ef
Added automated database backup on zip file selection
0244d3e
ci: workflow trigger for feature branch passwordreset
ranjinikrishnan 08ab970
feat: tools window with supervisor verification for password reset
65e8726
Update .github/workflows/ci.yml
ranjinikrishnan 5d6238f
Update Server/MysqlAdmin.cs
ranjinikrishnan 752b7b6
Added UI elements for the update process
351946f
Update document root to point to release
hakiatalov 2fa9b2e
Merge branch 'feature/s2026-passwordreset' into feature/s2026-passwor…
ranjinikrishnan 0cc3050
Merge pull request #38 from C4G/feature/s2026-passwordreset-tools-window
ranjinikrishnan 1fbf7a3
Merge pull request #40 from luqmanrashad/main
luqmanrashad 09ead14
Revert package-lock.json and ci.yml to main version
ranjinikrishnan 268eb8c
merge: combined password reset functionality with update zip file ui
aaded27
feat: Combining features into a single dropdown menu option
f3660e5
Merge remote-tracking branch 'origin/feature/s2026-passwordreset' int…
ranjinikrishnan 531caa1
adding hierarchy supervisor verification
ranjinikrishnan cb5b1ac
Implement Stage 2 self-update
luqmanrashad 310b1bc
Inject local directory path
hakiatalov 971ed31
Actually setting local directory path as environment vairable
hakiatalov 7213856
Adopt LOCAL_DIR and releases/dev/htdocs directory structure
luqmanrashad 0e77811
Extract version, backup/copy other files and update state.json
luqmanrashad 289b89a
fixing staging setup
luqmanrashad 4e31801
Stop servers before file ops, break update into 9 granular stages
luqmanrashad 5b7a256
removed updates panel in the reset dialog
ranjinikrishnan db77dc6
Merge remote-tracking branch 'origin/feature/combined-updates' into s…
hakiatalov e0c6274
Add environment variables for storage and data directories in Apache …
hakiatalov 1fa5063
Refactor: extract Mysql.cs from MySqlAdmin, register new classes in D…
ranjinikrishnan a9ab7d1
Removed old code-commented
ranjinikrishnan bdb6ec7
restore ci.yml to main
ranjinikrishnan 2645b23
Comments
ranjinikrishnan 11d5fc3
merge s2026-gha-peer-eval and feature/combined-update-tests into feat…
luqmanrashad 1b5f0ef
Merge remote-tracking branch 'origin/feature/v2-password-reset' into …
hakiatalov 24c0aab
Add update validation: same-version check, ZIP compatibility check, p…
8daf104
Split unpack/validate into separate stages, remove redundant Progress…
2b1cf82
Merge pull request #56 from C4G/main
asuquoe62-star 4bdec0d
feat: password validation and strength meter
4281e28
Merge pull request #58 from C4G/feature/s2026-passwordreset-tools-window
simotony77 babd145
Merge branch 'backup-working-version' into feature/s2026-passwordreset
ranjinikrishnan fa4c4ba
merging new input validation with full scope and close dialog option
ranjinikrishnan 6df04a3
restore packages.lock.json to unstable
ranjinikrishnan 51f4178
Merge branch 'unstable' into feature/s2026-passwordreset
ranjinikrishnan aa0402c
Merge pull request #59 from C4G/feature/s2026-passwordreset
ranjinikrishnan 7791b93
Merge pull request #61 from C4G/main
asuquoe62-star 390eb7e
change made for french Lang
8d4daad
Merge branch 'unstable' into s2026-new-lang
asuquoe62-star 8c69975
Merge pull request #62 from C4G/s2026-new-lang
asuquoe62-star ff783a1
Merge pull request #63 from C4G/unstable
asuquoe62-star 05512ab
update the password english
d58a641
Merge pull request #64 from C4G/s2026-new-lang
asuquoe62-star 1892f08
Merge branch 'unstable' into feature/s2026-self-update
luqmanrashad 711ccdf
Merge pull request #66 from C4G/feature/s2026-self-update
luqmanrashad 3027ff3
Conditionally enable self update feature, modify main window layout t…
mrysav 6737643
Path.Combine -> Path.Join
mrysav ccbaa11
Reenable autostart
mrysav beb4f55
Remove unnecessary usings
mrysav b8c8908
Conditionally disable self update; enable docroot escape hatch
mrysav ac1912a
Merge branch 'main' into unstable
mrysav 2e2d985
Update Views/ToolsWindow.axaml
mrysav 553f6bb
Make UnpackZip async
mrysav cc3c16a
remove single-line single-use function
mrysav eca832c
Merge branch 'main' into unstable
mrysav bcc8ddc
Add cacert.pem location to php.ini template
mrysav 08d9193
Add configuration dependencies
mrysav cef23c4
Add AppSettings.json configuration for reading/writing config
mrysav 6460bd8
Use dependency injection
mrysav 92d2a81
Use primary constructor
mrysav File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,52 @@ | ||
| namespace BLIS_NG.Config; | ||
|
|
||
| public static class LanguagePreferences | ||
| { | ||
| private const string DefaultLanguageCode = "en"; | ||
| private const string SettingsFileName = "launcher-language.txt"; | ||
|
|
||
| public static string GetLanguageCode() | ||
| { | ||
| try | ||
| { | ||
| var settingsPath = GetSettingsPath(); | ||
| if (!File.Exists(settingsPath)) | ||
| { | ||
| return DefaultLanguageCode; | ||
| } | ||
|
|
||
| var code = File.ReadAllText(settingsPath).Trim().ToLowerInvariant(); | ||
| if (code == "en" || code == "fr") | ||
| { | ||
| return code; | ||
| } | ||
| } | ||
| catch | ||
| { | ||
| // Fall back to English if settings can't be read. | ||
| } | ||
|
mrysav marked this conversation as resolved.
Dismissed
|
||
|
|
||
| return DefaultLanguageCode; | ||
| } | ||
|
|
||
| public static void SaveLanguageCode(string languageCode) | ||
| { | ||
| try | ||
| { | ||
| var normalized = languageCode.Trim().ToLowerInvariant(); | ||
| if (normalized != "en" && normalized != "fr") | ||
| { | ||
| normalized = DefaultLanguageCode; | ||
| } | ||
|
|
||
| File.WriteAllText(GetSettingsPath(), normalized); | ||
| } | ||
| catch | ||
| { | ||
| // Ignore write failures; app can continue with default language. | ||
| } | ||
|
mrysav marked this conversation as resolved.
Dismissed
|
||
| } | ||
|
|
||
| private static string GetSettingsPath() => | ||
| Path.Combine(ConfigurationFile.ResolveBaseDirectory(), SettingsFileName); | ||
| } | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,79 @@ | ||
| using System.Text.Json; | ||
| using System.Text.Json.Serialization; | ||
|
|
||
| namespace BLIS_NG.Config; | ||
|
|
||
| public class StateFile | ||
| { | ||
| private const string FileName = "state.json"; | ||
| private const string DefaultVersion = "dev"; | ||
|
|
||
| [JsonPropertyName("active_version")] | ||
| public string ActiveVersion { get; set; } = DefaultVersion; | ||
|
|
||
| [JsonPropertyName("previous_version")] | ||
| public string? PreviousVersion { get; set; } | ||
|
|
||
| /// <summary> | ||
| /// Reads state.json from the base directory. Returns defaults if the file is missing or invalid. | ||
| /// </summary> | ||
| public static StateFile Load(string baseDir) | ||
| { | ||
| var path = Path.Combine(baseDir, FileName); | ||
| if (!File.Exists(path)) | ||
| { | ||
| return new StateFile(); | ||
| } | ||
|
|
||
| try | ||
| { | ||
| var json = File.ReadAllText(path); | ||
| return JsonSerializer.Deserialize<StateFile>(json) ?? new StateFile(); | ||
| } | ||
| catch | ||
| { | ||
| return new StateFile(); | ||
| } | ||
|
github-code-quality[bot] marked this conversation as resolved.
Fixed
mrysav marked this conversation as resolved.
Dismissed
|
||
| } | ||
|
|
||
| /// <summary> | ||
| /// Writes state.json to the base directory. | ||
| /// </summary> | ||
| public void Save(string baseDir) | ||
| { | ||
| var path = Path.Combine(baseDir, FileName); | ||
| var options = new JsonSerializerOptions { WriteIndented = true }; | ||
| var json = JsonSerializer.Serialize(this, options); | ||
| File.WriteAllText(path, json); | ||
| } | ||
| } | ||
|
|
||
| public class VersionFile | ||
| { | ||
| private const string FileName = "version.json"; | ||
|
|
||
| [JsonPropertyName("version")] | ||
| public string Version { get; set; } = string.Empty; | ||
|
|
||
| /// <summary> | ||
| /// Reads version.json from the given directory. Returns null if the file is missing or invalid. | ||
| /// </summary> | ||
| public static VersionFile? Load(string directory) | ||
| { | ||
| var path = Path.Combine(directory, FileName); | ||
| if (!File.Exists(path)) | ||
| { | ||
| return null; | ||
| } | ||
|
|
||
| try | ||
| { | ||
| var json = File.ReadAllText(path); | ||
| return JsonSerializer.Deserialize<VersionFile>(json); | ||
| } | ||
| catch | ||
| { | ||
| return null; | ||
| } | ||
|
github-code-quality[bot] marked this conversation as resolved.
Fixed
mrysav marked this conversation as resolved.
Dismissed
|
||
| } | ||
| } | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,127 @@ | ||
| <?xml version="1.0" encoding="utf-8"?> | ||
| <root> | ||
| <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" | ||
| xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> | ||
| <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> | ||
| <xsd:element name="root" msdata:IsDataSet="true"> | ||
| <xsd:complexType> | ||
| <xsd:choice maxOccurs="unbounded"> | ||
| <xsd:element name="metadata"> | ||
| <xsd:complexType> | ||
| <xsd:sequence> | ||
| <xsd:element name="value" type="xsd:string" minOccurs="0" /> | ||
| </xsd:sequence> | ||
| <xsd:attribute name="name" use="required" type="xsd:string" /> | ||
| <xsd:attribute name="type" type="xsd:string" /> | ||
| <xsd:attribute name="mimetype" type="xsd:string" /> | ||
| <xsd:attribute ref="xml:space" /> | ||
| </xsd:complexType> | ||
| </xsd:element> | ||
| <xsd:element name="assembly"> | ||
| <xsd:complexType> | ||
| <xsd:attribute name="alias" type="xsd:string" /> | ||
| <xsd:attribute name="name" type="xsd:string" /> | ||
| </xsd:complexType> | ||
| </xsd:element> | ||
| <xsd:element name="data"> | ||
| <xsd:complexType> | ||
| <xsd:sequence> | ||
| <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> | ||
| <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> | ||
| </xsd:sequence> | ||
| <xsd:attribute name="name" type="xsd:string" use="required" /> | ||
| <xsd:attribute name="type" type="xsd:string" /> | ||
| <xsd:attribute name="mimetype" type="xsd:string" /> | ||
| <xsd:attribute ref="xml:space" /> | ||
| </xsd:complexType> | ||
| </xsd:element> | ||
| <xsd:element name="resheader"> | ||
| <xsd:complexType> | ||
| <xsd:sequence> | ||
| <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> | ||
| </xsd:sequence> | ||
| <xsd:attribute name="name" type="xsd:string" use="required" /> | ||
| </xsd:complexType> | ||
| </xsd:element> | ||
| </xsd:choice> | ||
| </xsd:complexType> | ||
| </xsd:element> | ||
| </xsd:schema> | ||
|
|
||
| <resheader name="resmimetype"> | ||
| <value>text/microsoft-resx</value> | ||
| </resheader> | ||
| <resheader name="version"> | ||
| <value>2.0</value> | ||
| </resheader> | ||
| <resheader name="reader"> | ||
| <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, | ||
| Culture=neutral, PublicKeyToken=b77a5c561934e089</value> | ||
| </resheader> | ||
| <resheader name="writer"> | ||
| <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, | ||
| Culture=neutral, PublicKeyToken=b77a5c561934e089</value> | ||
| </resheader> | ||
|
|
||
| <data name="App_Title" xml:space="preserve"> | ||
| <value>Système d'information de laboratoire de base (BLIS)</value> | ||
| </data> | ||
| <data name="App_Version_Format" xml:space="preserve"> | ||
| <value>BLIS pour Windows {0}</value> | ||
| </data> | ||
| <data name="App_Tagline" xml:space="preserve"> | ||
| <value>Une initiative conjointe de C4G à Georgia Tech, du CDC et des pays participants.</value> | ||
| </data> | ||
| <data name="App_LicenseNotice" xml:space="preserve"> | ||
| <value>C4G BLIS est sous licence GNU General Public License version 3. Pour plus d'informations, visitez blis.cc.gatech.edu.</value> | ||
| </data> | ||
| <data name="Button_StartBlis" xml:space="preserve"> | ||
| <value>Démarrer BLIS</value> | ||
| </data> | ||
| <data name="Button_StopBlis" xml:space="preserve"> | ||
| <value>Arrêter BLIS</value> | ||
| </data> | ||
| <data name="Status_Healthy" xml:space="preserve"> | ||
| <value>Statut : Fonctionnel</value> | ||
| </data> | ||
| <data name="Status_Starting" xml:space="preserve"> | ||
| <value>Statut : Démarrage en cours</value> | ||
| </data> | ||
| <data name="Status_ApacheHealthcheckFailed" xml:space="preserve"> | ||
| <value>Statut : Échec de la vérification d'état d'Apache2.</value> | ||
| </data> | ||
| <data name="Status_Stopping" xml:space="preserve"> | ||
| <value>Statut : Arrêt en cours</value> | ||
| </data> | ||
| <data name="Status_Stopped" xml:space="preserve"> | ||
| <value>Statut : Arrêté</value> | ||
| </data> | ||
| <data name="Label_Language" xml:space="preserve"> | ||
| <value>Langue :</value> | ||
| </data> | ||
| <data name="Language_English" xml:space="preserve"> | ||
| <value>Anglais</value> | ||
| </data> | ||
| <data name="Language_French" xml:space="preserve"> | ||
| <value>Français</value> | ||
| </data> | ||
| <data name="Message_RestartRequired" xml:space="preserve"> | ||
| <value>Langue mise à jour. Redémarrez le lanceur pour appliquer tous les changements de texte.</value> | ||
| </data> | ||
| <data name="Button_MoreOptions" xml:space="preserve"> | ||
| <value>Plus d'options</value> | ||
| </data> | ||
| <data name="Menu_UpdateWithZipFile" xml:space="preserve"> | ||
| <value>Mettre à jour avec un fichier ZIP</value> | ||
| </data> | ||
| <data name="Menu_ResetPassword" xml:space="preserve"> | ||
| <value>Réinitialiser le mot de passe</value> | ||
| </data> | ||
| <data name="Picker_SelectZipFile" xml:space="preserve"> | ||
| <value>Sélectionner un fichier ZIP</value> | ||
| </data> | ||
| <data name="Picker_ZipFiles" xml:space="preserve"> | ||
| <value>Fichiers ZIP</value> | ||
| </data> | ||
|
|
||
| </root> |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.