Niedermayer.ca
Published on Niedermayer.ca (https://niedermayer.ca)

Home > User Management System (UMS) -- Detailed System Design > System Architecture

System Architecture

Implementation Requirements

To satisfy the needs identified in the requirement analysis, a multi-tiered approach to the design is preferred. In particular, the components that effect the necessary changes to  the system configuration based on actions taken within the UMS should be isolated from the rest of the system. In this way, a migration to a new server or a new operating system release will require changes to these components without incurring the  complete system rewrite that the current migration entails.

At the same time, where multiple procedures require the same function, a list of shared libraries should encapsulate these functions for this same reason. In this way,  functions and services specific to the current version of RedHat (such as user authentication) can easily be altered to take into account new features or services of future releases.

However, to leverage volunteer resources, the tasks of developing the web interface (a task best suited to web developers) are separated from the tasks of developing back-end functionality (a task for formal PERL programmers). This distinction has the added benefit of allowing the web interface to be updated to a new corporate look in the future without affecting the application logic.

  • Log in [1] to post comments

Implementation Structure

As depicted in Figure 1 below, the develop effort can be broken into a number of conceptual parts:

  • Those volunteers knowledgeable in HTML will primarily develop the Web Interface. Skills for these people should include HTML forms, graphic design and layout and site navigation expertise. A common visual theme should predominate these pieces. As well, these people will develop HTML snippets that will be incorporated by CGI Application developers when a CGI application needs to return a complete web page to the client.
  • CGI Applications will leverage people knowledgeable in PERL. These individuals should understand CGI applications, be conversant in PERL and preferably have some knowledge of SQL and how to embed database calls within PERL scripts.
  • Shared Libraries will require people very knowledgeable in PERL. Ideally, these libraries should use PERL or Object-Oriented PERL objects for functionality such as maintaining persistent user sessions.
  • The Relational Database will use MySQL. If CGI application developers are not sufficiently conversant to embed SQL calls within their applications, an SQL-PERL specialist may perform this specialized function.
  • The System Configuration APIs will likely be written in Shell script or compiled C. They will require developers with the highest skills and most likely root access to the host machine.

Figure 1

  • Log in [2] to post comments

Implementation Components

Web Interface

Before development of the Web Interface, a Visual Identity Guide (VIG) will be required. This guide will contain the basic style elements to ensure that all pages on the User Interface are visually and thematically consistent with each other and with the general GPFN web site.

The Visual Identity Guide will also contain directives concerning how users will  navigate around the pages as well as how linkages outside the UMS pages back to the GPFN general web site will be incorporated.

In addition to the VIG, web developers will require a common set of resources such as icons, navigation bar graphics, template files and HTML Style. Developing the VIG and the other components will be the duty of the GPFN webmaster.

  • Log in [3] to post comments

System Configuration APIs

All System Configuration APIs must be intrinsically distrustful of their calling functions. This prevents a potential malefactor from directly calling these programs while masquerading as coming from a valid user. Such a masquerade could be successful if the API did not verify the authenticity of the caller on its own.

This distrust is managed by creating a virtual domain within the webserver for the UMS. The virtual domain along with its libraries and system configuration APIs will run under a distinct set of user and group permissions.

Password Change

The Password Change API is responsible to ensure that the username and old password successfully authenticate the user. Only if the user is verified in this way is the new password checked for hardness according to the system configuration (normally using the cracklib libraries), then using a suid program, this API effects the password change on the system.

Mail Forwarding

The Mail Forwarding API authenticates the user and if authenticated, allows the user to review, change or set the contents of their home .forward file.

Mail Filtering

The Mail Filtering API can perform many functions. For the purpose of this application, it copies a system .procmailrc template file into the user’s home account, thus effecting spam control. Again, the API must authenticate the user before effecting these  changes.

Reviewing Disk Quota

The Disk Quota API authenticates the user and once authenticated, returns the user’s current quota values for display back to the user via a CGI script.

  • Log in [4] to post comments

Shared Libraries

The Shared Library functions include all functions and methods used by two or more components of the system. It will include user authentication and managing of session credentials.

These functions will involve setting and retrieving cookies on the user’s browser, writing to and retrieving session values from the relational database, and managing Object Oriented PERL constructs and entities.

User Authentication

User authentication involves comparing the username supplied on a web form with the existence of the username on the system then comparing the password supplied on the form with the password maintained for the account on the system.

On a modern Linux system, Pluggable Authentication Modules, or PAM, supports user PAM supported libraries and applications are available on the Internet to be used as a template in constructing a custom authentication package.

For the UMS, a web form will request a user to input his username and password. PAM will then authenticate this user. If the user is successfully authenticated, a session  token will be created for the user. This token will have an expiry date one hour into the future.

Authenticating GPFN volunteers is a slightly different matter. A GPFN volunteer is not simply a user, but rather a user with increased permissions to the system this system  may not be suitable for volunteers. As well, volunteers may not want to use their  system password to authenticate themselves to the UMS. Instead, they may want to use a password specific to the UMS.

For this reason, authenticating GPFN volunteers will use the htaccess and htpasswd functions inherent in the Apache web server. Web pages and CGI scripts specific to volunteers will be in a separate directory under which the web server will apply  access controls.

Session Credentials

Once the system authenticates a user, the libraries will have to manage session persistence for the user. To effect this persistence, the libraries will have their own database in the RDBMS. When a user is authenticated, a session token will be created composed of the username, the access level, the session creation timestamp, and a unique pseudo-random session ID. This token is inserted into the database and a cookie with this session token will be sent back to the user’s browser.

From then on, any calls by the user to a page on the system will return the cookie. This cookie is matched with the cookie in the database. If a match exists, then the user is the holder of a currently valid session. Any of the following conditions indicates that the session is not currently valid:

  1. There is no corresponding session token in the database matching the session token contained in the supplied cookie.
  2. There is no cookie containing a session token sent back by the web browser.
  3. The session tokens for this user between the database and the sent  cookie do not match.
  4. If the timestamp of the cookie as recorded in the database exceeds the current timestamp less the expiry period of the session.

In any of these cases, the user is redirected back to the login page with the current pages’ URL stored in the QUERY_STRING for re-authentication and the session token is deleted from the database and the cookie. Once re-authenticated, the stored URL can be used to return the user to the page they were viewing before the authentication failure.

  • Log in [5] to post comments

Data Flow Analysis

The system implementation involves a number of distinct yet inter-related functions. The following dataflow diagrams show the interaction flows in the system. The last dataflow case: “Manage User Account” is slated for Phases 2 and 3 of the project.

  • Log in [6] to post comments

Data Flow Diagrams

Top Level Data Flow Diagram

The top-level dataflow diagram lists the interactions between the system. This interaction is further exploded for each dataflow in the subsequent diagrams:

DFD 0

  • Log in [7] to post comments

1. Process User Application Data Flow Diagram

Process User Application Data Flow Diagram

  • Log in [8] to post comments

2. Process User Upgrade Data Flow Diagram

2. Process User Upgrade Data Flow Diagram

  • Log in [9] to post comments

3. Generate Invoice Data Flow Diagram

3. Generate Invoice Data Flow Diagram

  • Log in [10] to post comments

4. Process Receipt Data Flow Diagram

4. Process Receipt Data Flow Diagram [11]

  • Log in [12] to post comments

5. Manage User Account Data Flow Diagram

The Manage User Account Data Flow is slated for implementation in phases 2 and 3 of the project.

5. Manage User Account Data Flow Diagram

  • Log in [13] to post comments

Web Navigation Model

The dataflow will be managed using a combination of HTML pages, Javascript functions within HTML, CGI scripts, embedded PERL within HTML, and some shell script and PERL script library functions.

To visualize the data flow as it relates to the actual structure of the web site, the  following Web Navigation Flow Diagrams were prepared. Figure 2 shows the pages available through the public web space to all users and potential users. Note that while an initial applicant can make an application without any sort of authentication, a user requesting an upgrade and all other user functions require the user to be authenticated prior to performing any of these actions.

 User Interactions with the System

The volunteer portion of the web site will be secured using the inherent access  controls of the Apache web server. As such, no user authentication library calls are required, the processing flow is somewhat simplified.

 GPFN Volunteer interations with the System

 
  • Log in [14] to post comments

Data Model

The Data Model is intended to be a comprehensive model to support both the immediate needs of the UMS and possible future features and enhancements. Not all fields will be used in the currently scoped implementation.

Entity Relationship Diagram

Entity Relationship Model diagram

  • Log in [15] to post comments

Data Dictionary

System_Default Table

System_Default Table
  Data Type Constraints Default Value Description

Sys_Default_Id

Int

Primary Key

 

System Generated Sequential Key

Sys_Ind_Mem_Price

Float

Not NULL

24.00

Approved Annual Fee for Individual Memberships

Sys_Inst_Mem_Price

Float

Not NULL

48.00

Approved Annual Fee for Institutional Memberships

Sys_Reg_User_Price

Float

Not NULL

0.00

Approved Annual Fee for Registered Non-member users

Sys_PPP_Price

Float

Not NULL

125.00

Approved Annual Fee for Graphical PPP Access

Sys_DB_Price

Float

Not NULL

 

Approved Annual Fee for Database Hosting

Sys_VirtualDomain_Price

Float

Not NULL

 

Approved Annual Fee for Virtual Domain Hosting

Sys_TimeQuota1

Float

Not NULL

?

Maximum allowed time per single session for users

Sys_TimeQuota2

Float

Not NULL

?

Maximum allowed sessions per day for users

Sys_SSL_Price

Float

Not NULL

 

Approved Additional Annual Fee for SSL encrypted Virtual Domain Hosting

Sys_ListServer_Price

Float

Not NULL

100.00

Approved Annual Fee for Listserver Hosting

Sys_Next_UserId

String (5)

Not NULL

 

Next available UserName for Registered User accounts following the Csuite naming convention of aannn1

Sys_ExtraDiskQuota_Price

Float

Not NULL

?

Approved Annual Pricing per Mb of extra Disk Quota above the approved included amounts

Sys_Incl_Quota1

Int

Not NULL

 

Approved Amount of basic disk space in filesystem1

Sys_Incl_Quota2

Int

Not NULL

 

Approved Amount of basic disk space in filesystem2

Sys_Incl_Quota3

Int

Not NULL

 

Approved Amount of basic disk space in filesystem3

Sys_Quota1_Mnt

 String (8)

Not NULL

 

Mount point on the system for quota1

Sys_Quota2_Mnt

 String (8)

Not NULL

 

Mount point on the system for quota2

Sys_Quota3_Mnt

 String (8)

Not NULL

 

Mount point on the system for quota3

Sys_Last_Annual_Cycle

Time­stamp

 

 

The timestamp of the last generated invoice cycle. This is used to frequent duplicate invoice cycles within the same fiscal year.

 


  • Log in [16] to post comments

User Table

User Table
Field Name Data Type Constraints Default Value Description

User_Number

Int

Primary Key

 

System Generated Sequential Number

User_LastName

String (30)

Not NULL

 

User’s Last Name

User_FirstName

String (20)

Not NULL

 

User’s First Name

User_Initial

String (60)

 

 

User’s Initial

User_Salutation

String (60)

 

One of “Mr.”, “Mrs.”, “Ms.”, “Dr.”, “Rev.”

User’s Title of Address

User_Organization

 String (50)

 

 

Name of User’s Organization if user is a group or collective entity

User_Title

String (30)

 

 

Position or title of person within the organization

User_StreetAddress1

String (30)

Not NULL

 

User’s first line of mailing address

User_StreetAddress2

String (30)

 

 

 

User_City

 String (30)

Not NULL

 

 

User_Province

String (30)

Not NULL

 

 

User_Country

 String (30)

Not NULL

 

 

User_PostalCode

 String (20)

Not NULL

 

 

User_HomePhone

String (20)

 

 

 

User_WorkPhone

 String (20)

 

 

 

User_Age

Int

 

 

Really only required for users under the age of majority (so we get their parent’s signature on any application)

User_IsActive

Int

Not NULL

0

0 for not active, 1 for active, 2 for declined, 3 for expired, 4 for purged

User_Since

 Time­stamp

Not NULL

 

Date the user applied for an account

User_IsMember

Int

Not NULL

0

0 for non-member, 1 for member

User_Status_Msg

 String (60)

 

 

Any Volunteer entered text string to describe issues concerning a user

User_UserName

String (16)

Not NULL

 

The system generated username for non- members, or the personalized username for members. This is only used during the account application process and NOT changed for users who upgrade to membership later.

User_InitialPassword

String (16)

Not NULL

Must be checked against the cracklib

The User requested initial password in MD5 hash encryption

User_EnteredBy

 String (16)

Not NULL

 

The name of the GPFN Volunteer adding the user to the system

 

  • Log in [17] to post comments

Member Table

Member Table
Field Name Data Type Constraint Default Value Description

User_Number

Int

Foreign Key

References User

If an entry exists in this table with User_Number, then we know that this User is also a member

Affinity_Number

String (10)

Foreign Key

References Affinity

If an entry exists in this table, then the member has a special pricing relationship with GPFN (to be implemented in Phase 4)

Member_Type

Int

Not NULL

1 or 2

1 for Individual Member, 2 for Institutional Member

Member_Since

Time­stamp

Not NULL

 

Date on which user applied to become a member

Member_EnteredBy

 String (16)

Not NULL

 

The name of the GPFN Volunteer adding the member to the system

 

  • Log in [18] to post comments

Affinity Table (Phase 4)

Affinity Table (Phase 4)
Field Name Data Type Constraints Default Value Description

Affinity_Number

String (10)

Primary Key

 

 

Affinity_Name

String (50)

Not NULL

 

Name of group or organization entering into an affinity relationship with GPFN

Affinity_Contact_ LastName

String (30)

Not NULL

 

Name of contact person with the group or organization

Affinity_Contact_ FirstName

String (20)

Not NULL

 

 

Affinity_StreetAddress1

String (30)

Not NULL

 

 

Affinity_StreetAddress2

String (30)

 

 

 

Affinity_City

 String (30)

Not NULL

 

 

Affinity_Province

String (30)

Not NULL

 

 

Affinity_Country

 String (30)

Not NULL

 

 

Affinity_PostalCode

String (30)

Not NULL

 

 

Affinity_Phone

String (20)

Not NULL

 

 

Affinity_Ind_Mem_Price

Float

Not NULL

0.00

Agreed price of individual memberships under this affinity agreement

Affinity_Ind_Mem_Max_ Count

Int

Not NULL

0

Agreed maximum number of individual memberships to be sold under this affinity agreement

Affinity_PPP_Price

Float

Not NULL

0.00

Agreed price of PPP connections under this affinity agreement

Affinity_PPP_Max_Count

Int

Not NULL

0

Agreed maximum number of PPP connections to be sold under this affinity agreement

Affinity_Quota1_Amt Int Not NULL 0 Agreed amount of disk space in
Quota space 1

Affinity_Quota2_Amt

Int

Not NULL

0

Agreed amount of disk space in Quota space 2

Affinity_Quota2_Amt

Int

Not NULL

0

Agreed amount of disk space in Quota space 2

Affinity_Quota_Max_ Count

Int

Not NULL

0

Agreed maximum number of members who benefit from the increased quota limits under this affinity

Affinity_Annual_ Agreement_Fee

Float

Not NULL

0.00

Annual Fee to be invoiced to the Affinity_Name for the terms of the affinity agreement

Affinity_EnteredBy

String (16)

Not NULL

 

The name of the GPFN Volunteer adding or editing the affinity to the system

 

  • Log in [19] to post comments

Services Table

Services Table
Field Name Data Type Constraints Default Value Description

User_Number

Int

Foreign Key

References User

 

Service_Text_Access

Int

Not NULL

1

1 if user has access to text-only dial-up

Service_PPP_Access

Int

Not NULL

0

1 if user has access to PPP graphical dial-up

Service_WebSite

Int

Not NULL

0

1 if user has access to web space within GPFN’s public web space (not including the user’s public_html directory)

Service_Website_Path

String

 

 

The relative path from the Webserver’s document root to the directory for this members’ web space within the gpfn.ca domain.

Service_DBAccess

Int

Not NULL

0

Number of databases the user has access to on the database server

Service_Quota1

Int

Not NULL

0

Number of extra Mb of disk space the user has subscribed to on the filesystem referenced by Quota1

Service_Quota2

Int

Not NULL

0

Number of extra Mb of disk space the user has subscribed to on the filesystem referenced by Quota2

Service_Quota3

Int

Not NULL

0

Number of extra Mb of disk space the user has subscribed to on the filesystem referenced by Quota3

Service_VirtualDomain

Int

Not NULL

0

Number of virtual domains the user has on the system

Service_ VirtualDomainName

String

 

 

Registered Name of the Virtual Domain

Service_TimeQuota1

Int

NotNULL

0

Amount of extra time the user has paid to be added to the value included in Sys_TimeQuota1

Service_TimeQuota2

Int

NotNULL

0

Amount of extra time the user has paid to be added to the value included in Sys_TimeQuota2

Service_EmailAliases_ Max_Count

Int

Not NULL

0

The maximum number of e-mail aliases belonging to this user

Service_SSL

Int

Not NULL

0

The number of SSL enabled Virtual Domain web hosts for this user on the system

Service_Listserver

Int

Not NULL

0

The number of Listservers for this user on the system

Services_EnteredBy

 String (16)

Not NULL

 

The name of the GPFN Volunteer adding or editing this service list on the system

 

  • Log in [20] to post comments

Email_Alias Table

Email_Alias Table
Field Name Data Type Constraints Default Value Description

Alias_Id

Int

Primary Key

 

System Generated Incremental Number

User_Number

Int

Foreign Key

References User

 

Alias_GPFNAddress

String (30)

Not NULL

 

The GPFN address to which mail is received

Alias_ExtAddress

String (50)

Not NULL

 

The non-GPFN address to which mail is redirected

 

  • Log in [21] to post comments

Invoice Table

Invoice Table
Field Name Data Type Constraints Default Value Description

Invoice_Number

Int

Primary Key

 

System Generated Incremental Number

User_Number

Int

Foreign Key

References User

 

Invoice_Date

Time­stamp

Not NULL

 

Date on which the invoice was issued

Invoice_Medium

 String (20)

Not NULL

 

One of “e-mail”, “paper”, “fax” or some other such descriptor of the method in which the invoice was delivered

Invoice_Amount

Float

Not NULL

 

The total value of the invoice

Invoice_EnteredBy

 String (16)

Not NULL

 

The name of the GPFN Volunteer adding this invoice to the system

 

  • Log in [22] to post comments

Invoice_Item Table

Invoice_Item Table
Field Name Data Type Constraints Default Value Description

Item_Number

Int

Primary Key

 

System Generated Incremental Number

Invoice_Number

Int

Foreign Key

References Invoice

 

User_Number

Int

Foreign Key

References User

 

Item_Description

String (60)

Not NULL

 

Description of the line item for the invoice

Item_Amount

Float

Not NULL

0.00

Amount of the line item for the invoice

 

  • Log in [23] to post comments

Receipt Table

Receipt Table
Field Name Data Type Constraints Default Value Description

Receipt_Number

Int

Primary Key

 

System Generated Incremental Number

Invoice_Number

Int

Foreign Key

References Invoice

 

User_Number

Int

Foreign Key

References User

 

Receipt_Date

Time­stamp

Not NULL

 

Date that the amount was received and processed by the volunteer

Receipt_Amount

Float

Not NULL

0.00

Amount received from the user

Receipt_Payment_Type

String (30)

Not NULL

 

One of “Cash”, “Cheque”, “Credit Card” or some other description

Receipt_Entered_By

 String (16)

Not NULL

 

The name of the GPFN Volunteer adding this receipt to the system

 

  • Log in [24] to post comments

Upgrade_Request Table

Upgrade_Request Table
Field Name Data Type Constraint Default Value Description

Upgrade_Id

Int

Primary Key

 

System Generated Incremental Number

Invoice_Number

Int

Foreign Key

References Invoice

 

User_Number

Int

Foreign_Key

References User

 

Upgrade_User-Ind

Int

Not NULL

0

1 if the upgrade turns a registered user into an individual member

Upgrade_User-Inst

Int

Not NULL

0

1 if the upgrade turns a registered user into an institutional member

Upgrade_Ind-Inst

Int

Not NULL

0

1 if the upgrade turns an individual into an institutional member

Upgrade_Username

String (16)

 

 

The selected username for a user upgrading to a membership from a registered user account.

Upgrade_toPPP

Int

Not NULL

0

1 if the upgrade enables PPP 

Upgrade_toDB

Int

Not NULL

0

The number of Databases to be added to the User’s account

Upgrade_DBName

String

 

 

The requested name for a database on the database server.

Upgrade_Quota1

Int

Not NULL

0

Number of Mb to be added to the user’s disk quota of the filesystem referenced by Quota1

Upgrade_Quota2

Int

Not NULL

0

Number of Mb to be added to the user’s disk quota of the filesystem referenced by Quota2

Upgrade_Quota3

Int

Not NULL

0

Number of Mb to be added to the user’s disk quota of the filesystem referenced by Quota3

Upgrade_toVirtualDomain

Int

Not NULL

0

Number of Virtual Domains to add to the user

Upgrade_ VirtualDomainName

String

 

 

The requested domain for an application for a virtual domain

Upgrade_TimeQuota1

Int

Not NULL

0

Number of additional minutes to add to Sys_TimeQuota1

Upgrade_TimeQuota2

Int

Not NULL

0

Number of additional sessions to be added to Sys_TimeQuota2 for this user

Upgrade_toSSL

Int

Not NULL

0

Number of SSL enabled web hosts to be added to this client

Upgrade_toAliases

Int

Not NULL

0

Number of additional email aliases to be added to this user’s services

Upgrade_AliasExtAddress

String

 

 

e-mail address of the external service to which e-mail to the alias will be redirected

Upgrade_ AliasGPFNAddress

String

 

 

e-mail address of the GPFN address to which mail will be receive and then redirected

Upgrade_toListserver

Int

Not NULL

0

Number of additional Listservers to be added to this user’s services

Upgrade_ListserverName

String

 

 

Name of mailing list for an upgrade to Listserver.

Upgrade_ApprovedBy

 String (16)

Not NULL

 

The name of the GPFN Volunteer approving this upgrade on the system

 

  • Log in [25] to post comments

Source URL:https://niedermayer.ca/node/73

Links
[1] https://niedermayer.ca/user/login?destination=node/73%23comment-form [2] https://niedermayer.ca/user/login?destination=node/74%23comment-form [3] https://niedermayer.ca/user/login?destination=node/76%23comment-form [4] https://niedermayer.ca/user/login?destination=node/78%23comment-form [5] https://niedermayer.ca/user/login?destination=node/77%23comment-form [6] https://niedermayer.ca/user/login?destination=node/79%23comment-form [7] https://niedermayer.ca/user/login?destination=node/80%23comment-form [8] https://niedermayer.ca/user/login?destination=node/81%23comment-form [9] https://niedermayer.ca/user/login?destination=node/82%23comment-form [10] https://niedermayer.ca/user/login?destination=node/83%23comment-form [11] https://niedermayer.ca/sites/default/files/large_dfd4.PNG [12] https://niedermayer.ca/user/login?destination=node/84%23comment-form [13] https://niedermayer.ca/user/login?destination=node/85%23comment-form [14] https://niedermayer.ca/user/login?destination=node/86%23comment-form [15] https://niedermayer.ca/user/login?destination=node/87%23comment-form [16] https://niedermayer.ca/user/login?destination=node/88%23comment-form [17] https://niedermayer.ca/user/login?destination=node/89%23comment-form [18] https://niedermayer.ca/user/login?destination=node/90%23comment-form [19] https://niedermayer.ca/user/login?destination=node/91%23comment-form [20] https://niedermayer.ca/user/login?destination=node/92%23comment-form [21] https://niedermayer.ca/user/login?destination=node/93%23comment-form [22] https://niedermayer.ca/user/login?destination=node/94%23comment-form [23] https://niedermayer.ca/user/login?destination=node/95%23comment-form [24] https://niedermayer.ca/user/login?destination=node/96%23comment-form [25] https://niedermayer.ca/user/login?destination=node/97%23comment-form