Skip to content
This repository has been archived by the owner on Oct 30, 2024. It is now read-only.

Commit

Permalink
CI Build Support & Updated for DNN 7.x support
Browse files Browse the repository at this point in the history
  • Loading branch information
mitchelsellers committed Nov 22, 2016
1 parent e402991 commit c07b5c2
Show file tree
Hide file tree
Showing 26 changed files with 1,930 additions and 1 deletion.
26 changes: 26 additions & 0 deletions ICG.Modules.SecurePasswordRecovery.sln
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 14
VisualStudioVersion = 14.0.24720.0
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICG.Modules.SecurePasswordRecovery", "SecurePasswordRecovery\ICG.Modules.SecurePasswordRecovery.csproj", "{97094F4D-BED8-4197-A7F3-AA13876276DE}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "CI Support", "CI Support", "{BBCA4A1B-3CF0-4CC6-9C58-BB15B2040594}"
ProjectSection(SolutionItems) = preProject
appveyor.yml = appveyor.yml
EndProjectSection
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{97094F4D-BED8-4197-A7F3-AA13876276DE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{97094F4D-BED8-4197-A7F3-AA13876276DE}.Debug|Any CPU.Build.0 = Debug|Any CPU
{97094F4D-BED8-4197-A7F3-AA13876276DE}.Release|Any CPU.ActiveCfg = Release|Any CPU
{97094F4D-BED8-4197-A7F3-AA13876276DE}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal
6 changes: 5 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
# Secure Password Recovery for DNN

[![Build status](https://ci.appveyor.com/api/projects/status/pibywj9jt7jf2g1c?svg=true)](https://ci.appveyor.com/project/IowaComputerGurus/dnn-securepasswordrecovery)

IowaComputerGurus's Secure Password Recovery module is the next step in helping keep your users information secure within your DotNetNuke Portal. Unlike the out of the box functionality of DotNetNuke, this module allows users to request a password reset. The user is then sent an "Access Code", using this code they can return to the site and reset their password. It is only at that time that the users password was actually changed.

Using this process provides a number of security benefits for users and portal administrators.
Expand All @@ -8,4 +11,5 @@ Using this process provides a number of security benefits for users and portal a
*Users that forgot their username can still request resets via e-mail.

##Minimum DNN Versions
Latest version requires DNN 8.0.0 and later.
Version 8.0.0 - DNN 8.0.0 and later.
Version 6.x - DNN 7.0.2 and later
138 changes: 138 additions & 0 deletions SecurePasswordRecovery/App_LocalResources/Settings.ascx.resx
Original file line number Diff line number Diff line change
@@ -0,0 +1,138 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<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" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<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=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="ControlTitle_settings.Text" xml:space="preserve">
<value>Secure Password Recovery Settings</value>
</data>
<data name="ModuleHelp.Text" xml:space="preserve">
<value />
</data>
<data name="lblExpiryTime.Text" xml:space="preserve">
<value>Set the duration for the recovery code (in hours)</value>
</data>
<data name="NumberField.Text" xml:space="preserve">
<value>Must be a whole number</value>
</data>
<data name="RequiredField.Text" xml:space="preserve">
<value>Required</value>
</data>
<data name="lblEnableCaptcha.Text" xml:space="preserve">
<value>Enable Captcha?</value>
</data>
</root>
175 changes: 175 additions & 0 deletions SecurePasswordRecovery/App_LocalResources/View.ascx.resx
Original file line number Diff line number Diff line change
@@ -0,0 +1,175 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<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" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<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=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="AlreadyReceived.Text" xml:space="preserve">
<value>&lt;h3&gt;Already Received a code?&lt;/h3&gt;

&lt;p&gt;If you have already received a password reset code, &lt;a href="[RESETURL]"&gt;click here&lt;/a&gt; to reset your password.&lt;/p&gt;</value>
</data>
<data name="btnRequestPasswordReset.Text" xml:space="preserve">
<value>Request Password Reset</value>
</data>
<data name="btnResetPassword.Text" xml:space="preserve">
<value>Reset Password</value>
</data>
<data name="PerformReset.Text" xml:space="preserve">
<value>Please enter your reset code and desired new password into the fields below and select "Change Password" to complete the reset process.</value>
</data>
<data name="RequestPrompt.Text" xml:space="preserve">
<value>If you would like to have your password reset, please supply your username or e-mail address below and an e-mail will be sent to you with instructions on resetting your password.</value>
</data>
<data name="RequiredField.Text" xml:space="preserve">
<value>Required</value>
</data>
<data name="ResetEmail.Text" xml:space="preserve">
<value>&lt;p&gt;A password reset request has been received for your [PORTALNAME] account. This request was for the user account [USERNAME]. If you did not request your password you may simply delete this e-mail.&lt;/p&gt;

&lt;p&gt;To reset your password, &lt;a href="[RESETLINK]"&gt;click here&lt;/a&gt;, your reset code of [CODE], will be pre-filled. Simply supply a new password and you will be able to login. If you are unable to click the link, you may copy and paste [RESETLINK] into your browsers address bar.&lt;/p&gt;</value>
</data>
<data name="ResetEmailSubject.Text" xml:space="preserve">
<value>Password Reset Request</value>
</data>
<data name="ExpiredCode.Text" xml:space="preserve">
<value>Password reset code not found or has expired</value>
</data>
<data name="InvalidCode.Text" xml:space="preserve">
<value>Password reset code is invalid.</value>
</data>
<data name="lblConfirmPassword.Text" xml:space="preserve">
<value>Confirm New Password:</value>
</data>
<data name="lblNewPassword.Text" xml:space="preserve">
<value>New Password:</value>
</data>
<data name="lblResetCode.Text" xml:space="preserve">
<value>Reset Code:</value>
</data>
<data name="lblUsernameOrEmail.Text" xml:space="preserve">
<value>Username or Email:</value>
</data>
<data name="RequestSent.Text" xml:space="preserve">
<value>Password request sent. You should receive an e-mail within 5-10 minutes with instructions on resetting your password</value>
</data>
<data name="ResetSuccess.Text" xml:space="preserve">
<value>Your password has been reset, you may now &lt;a href="[LOGIN]"&gt;login&lt;/a&gt;.</value>
</data>
<data name="CaptchaError.Text" xml:space="preserve">
<value>We need to make sure you are indeed a human being and not a bot. So we need you to type in the letters and numbers in the image into the box below "EXACTLY" as they appear before we'll let you through. </value>
</data>
</root>
Loading

0 comments on commit c07b5c2

Please sign in to comment.