[GH-ISSUE #668] Cannot login to dashboard despite good credentials and good database connection #436

Closed
opened 2026-02-25 21:35:01 +03:00 by kerem · 4 comments
Owner

Originally created by @MrNonoss on GitHub (Jan 29, 2023).
Original GitHub issue: https://github.com/cypht-org/cypht/issues/668

💬 Question

Hi all,

I have been struggling for two days making cypht work. Maybe someone here can point me to the right direction.
My goal is to get a working docker version, with Caddy webserver, PHP8, redis and an Sqlite database.

I know there's already a docker version, but pretty outdated and not really functional.

ISSUE

I got:

  • functional login screen,
  • functional database connectivity
  • database setup correctly, with all needed tables
  • code 200 server response when login

I have not:

  • functional redis instance (for now, redis and memcached are disables to avoid traces in logs)
  • being able to go batons the login screen, which is the real problem

SETUP

Docker is working fine on a MacOS host (my testing device), and I have been able to go once behind the login screen, but cannot reproduce.

In the hm3.ini, I have setup session, authentication and settings to DB and I followed all the instructions here

LOGS

Safari logs from developper tools `` Summary URL: http://localhost/mail-debug/ URL: http://localhost/mail-debug/?page=message_list&list_path=unread Status: 200 OK Source: Network Address: ::1:80

Request
POST /mail-debug/
Referer: http://localhost/mail-debug/
Origin: http://localhost
Content-Type: application/x-www-form-urlencoded
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.2 Safari/605.1.15

Redirect Response
303 See Other
Location: ?page=message_list&list_path=unread
Date: Sun, 29 Jan 2023 18:13:38 GMT

Request
GET /mail-debug/ HTTP/1.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8
Cookie: phpMyAdmin=1b33791664103dbe49fe274ec78904ad; pmaUser-1=43Okg0TLsm3w8HMdDMhEKUFLMcP1nfXu6ctGOEkkZAVItQlsxaEyO%2FnVN8ojounc; pma_lang=en
Accept-Language: en-GB,en;q=0.9
Upgrade-Insecure-Requests: 1
Host: localhost
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.2 Safari/605.1.15
Referer: http://localhost/mail-debug/
Accept-Encoding: gzip, deflate
Connection: keep-alive

Response
HTTP/1.1 200 OK
Transfer-Encoding: Identity
Content-Type: text/html; charset=UTF-8
Date: Sun, 29 Jan 2023 18:13:38 GMT
X-Powered-By: PHP/8.1.15RC1
Server: Caddy
``

PHP logs when login ``

2023-01-29 19:13:38 NOTICE: PHP message: Array
2023-01-29 19:13:38 172.24.0.2 - 29/Jan/2023:18:13:38 +0000 "POST /index.php" 303
2023-01-29 19:13:38 (
2023-01-29 19:13:38 [0] => Using Hm_DB_Session with Hm_Auth_DB
2023-01-29 19:13:38 [1] => Using DB user configuration
2023-01-29 19:13:38 [2] => Using sapi: fpm-fcgi
2023-01-29 19:13:38 [3] => Request type: HTTP
2023-01-29 19:13:38 [4] => Request path: /mail-debug/
2023-01-29 19:13:38 [5] => TLS request: 0
2023-01-29 19:13:38 [6] => Mobile request: 0
2023-01-29 19:13:38 [7] => Page ID: home
2023-01-29 19:13:38 [8] => CACHE backend using: noop
2023-01-29 19:13:38 [9] => Connecting to dsn: sqlite:/var/lib/hm3/cypht.db
2023-01-29 19:13:38 [10] => Setting cookie: name: hm_id, lifetime: 0, path: /mail-debug/, domain: localhost, secure: , html_only 1
2023-01-29 19:13:38 [11] => Setting cookie: name: hm_session, lifetime: 0, path: /mail-debug/, domain: localhost, secure: , html_only 1
2023-01-29 19:13:38 [12] => LOGGED IN
2023-01-29 19:13:38 [13] => CACHE: miss for "feed_read_uids" using noop
2023-01-29 19:13:38 [14] => CACHE: saving "nux_dev_news" using noop
2023-01-29 19:13:38 [15] => Redirecting to ?page=message_list&list_path=unread
2023-01-29 19:13:38 [16] => PHP version 8.1.15RC1
2023-01-29 19:13:38 [17] => Zend version 4.1.15RC1
2023-01-29 19:13:38 [18] => Peak Memory: 8192
2023-01-29 19:13:38 [19] => PID: 8
2023-01-29 19:13:38 [20] => Included files: 78
2023-01-29 19:13:38 )
2023-01-29 19:13:38 NOTICE: PHP message: Array
2023-01-29 19:13:38 172.24.0.2 - 29/Jan/2023:18:13:38 +0000 "GET /index.php" 200
2023-01-29 19:13:38 (
2023-01-29 19:13:38 [0] => Using Hm_DB_Session with Hm_Auth_DB
2023-01-29 19:13:38 [1] => Using DB user configuration
2023-01-29 19:13:38 [2] => Using sapi: fpm-fcgi
2023-01-29 19:13:38 [3] => Request type: HTTP
2023-01-29 19:13:38 [4] => Request path: /mail-debug/
2023-01-29 19:13:38 [5] => TLS request: 0
2023-01-29 19:13:38 [6] => Mobile request: 0
2023-01-29 19:13:38 [7] => Page ID: message_list
2023-01-29 19:13:38 [8] => CACHE backend using: noop
2023-01-29 19:13:38 [9] => TRANSLATION NOT FOUND :Cypht:
2023-01-29 19:13:38 [10] => PHP version 8.1.15RC1
2023-01-29 19:13:38 [11] => Zend version 4.1.15RC1
2023-01-29 19:13:38 [12] => Peak Memory: 8192
2023-01-29 19:13:38 [13] => PID: 7
2023-01-29 19:13:38 [14] => Included files: 81
2023-01-29 19:13:38 )

``

hm3.ini ``

; -----------------------------------------------------------------------------
; General settings
; -----------------------------------------------------------------------------

; Session Type
; ------------
; Sessions are how the server maintains your logged in state. Cypht supports
; standard PHP sessions, as well as its own completely independent session
; system that uses memcached or a database for storage. In order to use
; database sessions, the database must be correctly configured in the "DB
; Support" section and the hm_user_session table must be created. In order to
; use Memcached sessions, the memcached server must be correctly configured
; in the "Memcached Support" section. In order to use Redis session, the
; Redis server must be configured in the "Redis Support" section.
;
; Valid values for this setting:
;
; PHP Standard PHP session handlers
; DB Custom database based sessions
; MEM Custom Memcached based sessions
; REDIS Custom Redis based sessions
; custom Create your own session class. See the modules/site/lib.php file for
; more info
;
session_type=DB

; Authentication Type
; -------------------
; This setting defines how Cypht will authenticate your username and password
; when you login. If you want to use a database it must be correctly configured
; in the "DB Support" section and the hm_user table must be created. There are
; 3 PHP cli scripts to help manage database users in the scripts/ directory (
; create_account.php, delete_account.php, and update_password.php). If you want
; to authenticate against an IMAP server, you must setup the imap_auth_* settings
; below. If you want to authenticate against a POP3 server, you must setup the
; pop3_auth_* settings below. If you want to authenticate against an LDAP server,
; you must setup the ldap_auth_* settings. Finally, if you want to let users
; pick from a list of popular mail services or try to auto-discover a mail
; system, set this to dynamic and make sure the dynamic_login module set is
; enabled in the "Module Sets" section of this file.
;
; Valid values for this setting:
;
; DB Authenticate against the database
; LDAP Authenticate against an LDAP server
; IMAP Authenticate using an IMAP server
; POP3 Authenticate using a POP3 server
; dynamic Let the user choose from a list, or try to auto discover the mail
; services based on the email domain
; custom Create your own auth class. See the modules/site/lib.php file for
; more info
;
auth_type=DB

; LDAP Authentication
; -------------------
; If auth_type is set to LDAP, configure the LDAP server to authenticate against
; with the following settings, otherwise these are ignored.
;

; The hostname or IP address of the LDAP server to authenticate to
ldap_auth_server=localhost

; The port the LDAP server is listening on.
ldap_auth_port=389

; Enable TLS/SSL connections. Leave blank or set to false to disable. Set to
; true to enable TLS connections.
ldap_auth_tls=

; The "base dn" of the LDAP server
ldap_auth_base_dn="example,dc=com"

; IMAP Authentication
; -------------------
; If auth_type is set to IMAP, configure the IMAP server to authenticate against
; with the following settings, otherwise these are ignored.
;
; This is just a label used in the UI. It can be set to anything
imap_auth_name=localhost

; The hostname or IP address of the IMAP server to authenticate to
imap_auth_server=localhost

; The port the IMAP server is listening on.
imap_auth_port=143

; Enable TLS/SSL connections. Leave blank or set to false to disable. Set to
; true to enable TLS connections. If you want to use IMAP STARTTLS, do NOT
; enable this. This is only for TLS enabled sockets (typically on port 993).
imap_auth_tls=

; POP3 Authentication
; -------------------
; if auth_type is set to POP3, configure the POP3 server to authenticate against
; with the following settings, otherwise these are ignored.
;
; This is just a label used in the UI. It can be set to anything
pop3_auth_name=localhost

; The hostname or IP address of the POP3 server to authenticate to
pop3_auth_server=localhost

; The port the POP3 server is listening on.
pop3_auth_port=110

; Enable TLS/SSL connections. Leave blank or set to false to disable. Set to
; true to enable TLS connections.
pop3_auth_tls=

; Default SMTP Server
; -------------------
; You can set a default SMTP server for all Cypht users. Authentication will be
; done with the users login credentials, so this only makes sense if you are
; using POP3 or IMAP for authentication. Leave these values blank to disable a
; default SMTP server, otherwise fill in the required values below
;
; This is just a label used in the UI. It can be set to anything
default_smtp_name=

; The hostname or IP address of the SMTP server
default_smtp_server=

; The port the SMTP server is listening on.
default_smtp_port=

; Enable TLS/SSL connections. Leave blank or set to false to disable. Set to
; true to enable TLS connections.
default_smtp_tls=

; If your SMTP service does not require authentication, you can disable it
; by setting the following to true.
default_smtp_no_auth=

; Settings Storage
; ----------------
; Cypht supports 3 methods for saving user settings between logins. File based
; settings, database table or custom implementation. To store settings in a
; database, it must be configured in the "DB Support" section and the
; hm_user_settings table must be created. To store settings on the filesystem,
; the user_settings_dir must be created and the webserver software must be able
; to write to it. For custom implementations, see Hm_User_Config_File.
;
; Valid values for this setting:
;
; file Store user settings in the filesystem
; DB Store user settings in a database
; custom Store user settings via custom implementation. Specify class name
; after colon, e.g. custom:Custom_User_Config
;
user_config_type=DB

; Settings Location
; -----------------
; If user_config_type is set to file, this must be set to an existing directory
; that the webserver software can read and write to. If settings storage is set
; to DB, this is ignored. It should not be inside the webserver document root.
user_settings_dir=/var/lib/hm3/users

; Attachment Location
; -------------------
; Cypht needs a temporary place to store attachments that are to be sent with
; an outgoing message. This folder must exist and be writable by the webserver
; software. It should not be inside the webserver document root.
attachment_dir=/var/lib/hm3/attachments

; Application Data Location
; -------------------------
; Some Cypht module sets have their own ini files that need to be readable by
; the webserver software, but not writable, and definitely not inside the
; webserver document root.
app_data_dir=/var/lib/hm3/app_data

; Disable origin check
; --------------------
; To help protect against CSRF attacks, Cypht checks origin headers to confirm
; that the source and target origin domains match. If you are using proxies this
; could create a problem making it impossible to login. Change this to true to
; disable the origin check.
disable_origin_check=true

; Admin Users
; ----------
; You can define a comma delimited list of admin users that Cypht will grant
; special rights to. Currently this only enables the "create account" link in
; the account module set that provides a form to create a new account. This is
; only used if the auth_type is set to DB. Leave this blank if you don't want
; to define any admin users, or are using IMAP or POP3 authentication.
admin_users=

; Cookie Domain
; -------------
; By default Cypht uses the server name used in the request to determine
; the domain name to set the cookie for. Configurations that use a reverse
; proxy might need to define the domain name used for cookies. Leave this
; blank to let Cypht automatically determine the domain. You can also use
; the special value of "none" to force Cypht to NOT set the cookie domain
; property at all. This is not recommended unless you know what you are
; doing!
cookie_domain=

; Cookie Path
; -------------
; By default Cypht uses the request URI to determine the cookie path to set
; the cookie for. Configurations that use mod_rewrite might need to define
; the path used for cookies. E.g. /cypht/embedded?page=compose will set path
; to /cypht/embedded/ which won't send the cookies back to the server. In that
; case set cookie_path=/cypht/. Leave this blank to let Cypht automatically
; determine the path. You can also use the special value of "none" to force
; Cypht to NOT set the cookie path property at all. This is not recommended
; unless you know what you are doing!
cookie_path=

; Outbound Email Domain
; ----------------------
; Default domain used for outbound email addresses when using IMAP auth and
; users don't login with a full email address. Users can customize this with
; the profiles module which will override this default
default_email_domain=

; Auto-Create Profile
; -------------------
; When a user logs in and they have only 1 IMAP server and 1 SMTP server, and
; no configured profiles - enabling this option will auto-create a profile for
; them. Email and reply-to addresses will use the default_email_domain if
; set, otherwise it will fallback to the domain Cypht is hosted on.
autocreate_profile=

; Redirect After Login
; --------------------
; You can login directly to any page in Cypht by going to the correct url before
; logging in, but that is not very user-friendly. To redirect users to a url
; after login, add the url arguments below (everything in the url after, but
; including, the question mark). You must use double quotes around the value
; otherwise it will cause an ini parsing error. To redirect users after login
; to the combined unread view you would use:
;
; redirect_after_login="?page=message_list&list_path=unread"
redirect_after_login="?page=message_list&list_path=unread"

; Application Name
; ----------------
; This label is used in the UI to reference the program - you can change it to
; "Your awesome webmail" to replace the Cypht name used in various places.
app_name=Cypht

; Force Mobile UI
; ---------------
; Cypht will detect mobile devices and display a mobile optimized UI. If you want
; to aways use this UI regardless of device, set this to true
always_mobile_ui=

; Default Language
; ----------------
; Users can select from available interface languages on the site settings page.
; This sets the default for a user who has not done so. Valid values are 2 character
; langauge codes that have matching language definitions in the language/ folder.
default_language=en

; JavaScript Compression
; ----------------------
; When the configuration script is run, all JavaScript files are concatenated
; and optionally compressed. To compress the content, define a command and its
; options below. Cypht does not come with compresson software, so you must
; install and configure that separately. Leave blank or set to false to disable
; external compression. Compression software must be able to handle ES6.
;
; Example:
; js_compress='uglifyjs.terser -c -m --verbose --warn'
;
js_compress=false

; CSS Compression
; ---------------
; When the configuration script is run, all CSS files are concatenated and
; optionally compressed. To compress the content, define a command and its
; options below. Cypht does not come with compresson software, so you must
; install and configure that separately. Leave blank or set to false to disable
; external compression.
;
; Example:
; css_compress='java -jar /usr/local/lib/yuicompressor-2.4.8.jar --type css'
;
css_compress=false

; Caching Server Support
; ---------------------

; Cypht can use Redis or Memcache to improve performance, as well as to store
; user sessions. Configure Redis or Memcached below and Cypht will
; automatically use them for caching. All data cached for a user in either
; system is encrypted. Currently, the feeds, POP3, and IMAP modules will use
; the configured cache. If both Redis and Memcached are configured, Redis will
; be used for the cache.
;
; If you want to use the user session as a cache, uncomment the line below and
; set to true. THIS IS NOT RECOMMENDED. Cypht uses parallel requests to the
; server, and using the session as a cache is likely to cause race conditions
; and integrity issues. If you are running Cypht in an "embedded" mode with
; only one email source, this option is less likely to be a problem.

; allow_session_cache=false

; Redis Support
; -------------

; Configure Redis details below to use it for caching
enable_redis=false
redis_server=127.0.0.1
redis_port=6379
redis_index=1
redis_pass=
redis_socket=/tmp/sock/redis.sock

; Memcached Support
; -----------------
; Configure Memcached details below to use it for caching
enable_memcached=false
memcached_server=127.0.0.1
memcached_port=11211

; If you need SASL authentication for memcached, set the following to true
; and add the username and password to authenticate with
memcached_auth=false
memcached_user=
memcached_pass=

; Allow Long Sessions
; -------------------
; Cypht logins only last as long as the browser is open. Closing the browser,
; or moving to a new network, will cause you to be logged out. This setting
; provides users with a "stay logged in" option during login that will set the
; sesison lifetime to a default of 30 days, and disable the IP address check.
;
; USE WITH CAUTION SINCE THIS DISABLES SOME SESSION PROTECTIONS.
;
; Specifically:
;
; - Session cookies stay active after a browser restart making them more
; susceptible to snooping
; - The browser "fingerprint" was use to help protect against session hijacking
; includes the client's IP. With this option enabled a client IP can change
; mid-session and it won't log them out
allow_long_session=false

; Set the session lifetime in days. Only applies if allow_long_session is set to
; true, and a user checks the box to "stay logged in" during login.
long_session_lifetime=30

; Browser Encryption Options
; --------------------------
; Cypht can use the Forge JavaScript encryption library to encrypt AJAX
; responses and data stored in browser local storage. Enabling either one of
; these options causes the Forge JavaScript library to be included. This adds
; about 70KB to the page size (when gzipped).

; Use AES encryption for AJAX responses. Set to true to enable, leave blank or
; set to false to disable.
encrypt_ajax_requests=

; Use AES encryption for data stored in the browser local storage. Set to true
; to enable, or leave blank or set to false to disable.
encrypt_local_storage=

; Allow client IP changes
; -----------------------
; By default Cypht will log you out if your client IP address changes. This is
; an extra layer of protection against session hijacking, but it's not uncommon
; for your client IP to change. Change this to true if you want to disable this
; check
disable_ip_check=false

; Allow remote image sources
; --------------------------
;
; WARNING: Using this feature could leak information to external sources.
;
; By default, Cypht will not allow external images to be loaded when viewing an
; HTML formatted email message. A Content Security Policy header limits images
; sources to "self" only and the message content is filtered to remove any external
; resource. If you really want the ability to view external images in an email,
; you first need to change the following setting to true. When viewing an HTML
; formatted message, you will now have a link before the message body called "Allow
; Images" that will reload the message part with external images visible.
allow_external_image_sources=true

;
; Single server mode
; ------------------
; This setting restricts Cypht to only using a single email source (POP3 or
; IMAP) and the default SMTP server defined in this file. It modifies the UI to
; remove the ability to add other email sources, and removes the password
; restriction when saving data between logins. You must use either IMAP or POP3
; authentication for this setting to be enforced, and auth server will be the
; single email source users have access to. If you enable this after users
; have saved any settings, they will be lost (or if you disable it after they
; have saved any settings). WARNING: USER SETTINGS SAVED TO THE SERVER WILL NOT
; BE ENCRYPTED WITH THIS ENABLED
single_server_mode=false

; Integration options
; -------------------
; Cypht does a few things to make it more secure by default, but these features
; can make it difficult to integrate Cypht into 3rd party software. Specifically,
; Cypht disables PHP "super globals", and sets a restrictive PHP "open basedir"
; setting, tweaks PHP ini settings to increase security, and uses a browser
; "fingerprint" to improve session security. You can disable each with the
; following options:

; Don't empty PHP super globals
disable_empty_superglobals=false

; Don't apply open basedir restrictions
disable_open_basedir=true

; Don't tweak ini settings
disable_ini_settings=false

; Don't use a browser fingerprint
disable_fingerprint=false

; You can create your own custom authentication and session classes using the
; site module set, however you might want those classes located somewhere else
; outside of the Cypht code base. By setting session_type and auth_type to custom,
; you can control what class is used with the following settings

; auth_class=
; session_class=

; -----------------------------------------------------------------------------
; DB Support
; -----------------------------------------------------------------------------

; Database Support
; ----------------
; Cypht can use a database for 3 different purposes: authentication, sessions,
; and user settings. Each requires the following settings to be configured and
; the correct table to be created. CREATE TABLE SQL statements for MySQL and
; Postgresql are below.
;
; Connection type. Can be "host" to connect to a hostname, or "socket" to
; connect to a unix socket.
db_connection_type=socket

; Database host name or ip address. If db_connection_type is set to "socket",
; this value is ignored
db_host=127.0.0.1

; Database port. Only needed if your database is running on a non-standard
; port
db_port=

; If db_connection_type is set to "socket", this should be the filesystem
; location of the unix socket file. If db_connection_type is set to "host"
; this value is ignored.
db_socket=/var/lib/hm3/cypht.db

; Name of the database with the required tables
db_name=cypht.db

; User to connect to the database with
db_user=

; Password to connect to the database with
db_pass=

; Database type. can be any supported PDO driver ; (http://php.net/manual/en/pdo.drivers.php)
db_driver=sqlite

; DB Sessions
; -----------
; If your session_type is set to DB, the following table must exist in the DB
; defined above, and the db user must have read-write access to it:
;
; Postgresql:
; CREATE TABLE hm_user_session (hm_id varchar(250) primary key not null, data text, date timestamp);
;
; MySQL or SQLite:
; CREATE TABLE hm_user_session (hm_id varchar(180), data longblob, date timestamp, primary key (hm_id));

; DB Authentication
; -----------------
; If your auth_type is set to DB, the following table must exist in the DB
; defined above, and the db user must have read-write access to it:
;
; Postgresql:
; CREATE TABLE hm_user (username varchar(255) primary key not null, hash varchar(255));
;
; MySQL or SQLite:
; CREATE TABLE hm_user (username varchar(250), hash varchar(250), primary key (username));

; DB Settings
; -----------
; If your user_config_type is set to DB, the following table must exist in the
; DB defined above, and the db user must have read-write access to it:
;
; Postgresql:
; CREATE TABLE hm_user_settings (username varchar(250) primary key not null, settings text);
;
; MySQL or SQLite:
; CREATE TABLE hm_user_settings(username varchar(250), settings longblob, primary key (username));

; -----------------------------------------------------------------------------
; Modules
; -----------------------------------------------------------------------------

; Module Sets
; -----------
; Cypht uses module sets to separate functionality in the program. Module sets
; can be enabled and disabled independently by commenting out or uncommenting
; the assignments below. Add a new assignment to enable your own module sets.

; Core
; ----
; Handles page layout, login/logout, and the default settings pages. This set
; is required.
modules[]=core

; Contacts
; -------
; Contact support. This module requires that at least one "backend" contacts
; module be enabled (ldap_contacts, gmail_contacts, or local_contacts). You
; can enable all the backends you want to support.
modules[]=contacts

; Local contact support. Simple, locally stored contacts backend
modules[]=local_contacts

; LDAP contact support. Use an LDAP server to store contacts. This module
; uses its own ini file in modules/ldap_contacts/. This file must be edited
; and moved to your app_data_dir to configure LDAP access.
; modules[]=ldap_contacts

; Gmail contact support. Read-only support for Gmail contacts. Only available
; if you have a Gmail account enabled that uses OAuth2 authentication
; modules[]=gmail_contacts

; Feeds
; -----
; RSS/ATOM feed support
modules[]=feeds

; POP3
; ----
; POP3 email account support
; modules[]=pop3

; IMAP
; ----
; IMAP email account support. If you want to use OAuth2 over IMAP (currently
; only supported by Gmail and Outlook.com), you will need to edit the oauth2.ini
; file in modules/imap/, and move it to your app_data_dir location.
modules[]=imap

; 2 factor authentication
; -----------------------
; This module enables 2 factor authentication using TOTP (compatible with
; Google Authenticator). You must edit the ini file in modules/2fa/ to
; configure a shared secret, then move that file to your app_data_dir.
modules[]=2fa

; SMTP
; ----
; Send outbound email using SMTP servers
modules[]=smtp

; Account
; ------
; UI features for admins to create accounts, and for users to update passwords
; (when using the built-in DB authentication)
modules[]=account

; Idle timer
; ---------
; Controls idle time and automatic logout
modules[]=idle_timer

; Desktop notifications
; ---------------------
; Enable desktop notifications for new messages
modules[]=desktop_notifications

; Calendar
; -------
; Basic calendar
modules[]=calendar

; Themes
; ------
; Change the UI using CSS
modules[]=themes

; NUX
; ---
; Friendly new user experience. Quickly add common email services, and view
; development updates
modules[]=nux

; Developer
; ---------
; For development, provides resources and installation details. Only available
; in "debug mode"
modules[]=developer

; Github
; ------
; Github repository tracking. This module has its own ini file located in
; modules/github/. You must edit this file, and move it to your app_data_dir
; to establish communication with github.
; modules[]=github

; reCAPTCHA
; ---------
; Use the reCAPTCHA server on login. This module has its own ini file in
; modules/recaptcha/. You must edit this file, and move it to the location
; defined in app_data_dir to gain access to the WordPress notification API.
; modules[]=recaptcha

; WordPress
; ---------
; WordPress.com notifications. This module has its own ini file in
; modules/wordpress/. You must edit this file, and move it to the location
; defined in app_data_dir to gain access to the WordPress notification API.
; modules[]=wordpress

; History
; -------
; Simple list of messages read since login
modules[]=history

; Saved searches
; --------------
; Save and re-run searches easily
modules[]=saved_searches

; Advanced search
; ---------------
; Enable the advanced search form
modules[]=advanced_search

; Message highlighting
; --------------------
; Create custom rules to highlight messages in lists with different colors
modules[] = highlights

; NASA
; ----
; Access the NASA APOD API content
; modules[]=nasa

; Profiles
; --------
; Profiles to set reply-to, name, and signature to associated email accounts
modules[]=profiles

; Inline message
; --------------
; View messages inline in a reading pane instead of on a new page
modules[]=inline_message

; IMAP folders
; -----------
; Support for adding/renaming/deleting folders in IMAP accounts
modules[]=imap_folders

; Keyboard Shortcuts
; ------------------
; Enables configurable keyboard shortcuts for navigations and actions
modules[]=keyboard_shortcuts

; Sieve Filters
; ------------------
; Enables configurable Sieve based IMAP filters
; modules[]=sievefilters

; Site
; ----
; Site specific overrides. Used to control other module sets without hacking
; the code.
; modules[]=site

; Dynamic login
; -------------
; Allows user to authenticate against a list of popular mail services, or to
; auto-discover the services for the specified email address. The auth_type
; setting must be set to "dynamic", otherwise this module set does not do
; anything
; modules[]=dynamic_login

; API login
; --------
; Allows an API based login that returns a JSON response containing the session
; and hm_id values needed to create a login session. You will need to set the
; api_login_key value to something unique and include that in the POST request.
; modules[]=api_login
; api_login_key=

; Recover settings
; ----------------
; When using IMAP or POP3 authentication, if a user's password is changed, we
; can't decrypt the existing user settings. This module detects that situation
; and provides a page where a user can enter their old and new passwords to
; recover their previous settings.
; modules[]=recover_settings

; Hello World
; -----------
; Example module set with lots of comments
; modules[]=hello_world

; -----------------------------------------------------------------------------
; User Defaults
; All of these settings can be changed by users, but you can uncomment and set
; the default behavior using the following options. This will only effect new
; users or ones that have never saved their settings.
;
; Per source time limits have valid values of:
; -1 day
; -1 week
; -2 weeks
; -4 weeks
; -6 weeks
; -6 months
; -1 year
; -5 years
;
; Per source maximums can be from 1 to 1000
; -----------------------------------------------------------------------------

; If set to true, passwords for email accounts will never be saved between logins
; Defaults to false
; default_setting_no_password_save=false

; Number of messages per page when viewing IMAP folders
; Defaults to 20
; default_setting_imap_per_page=20

; Amount of IMAP message structure detail on the message view page
; Defaults to full structure
; default_setting_simple_msg_parts=false

; Next and Previous emails on the message view page
; Defaults to full structure
; default_setting_pagination_links=true

; Show icons for each IMAP message part type
; Defaults to true
; default_setting_msg_part_icons=true

; Prefer text parts when viewing a message
; Defaults to false
; default_setting_text_only=false

; Per source max for the combined sent view
; Defaults to 20
; default_setting_sent_per_source=20

; Per source time limit for the combined sent view
; Defaults to 1 week
; default_setting_sent_since='-1 week'

; Display source icons in message lists
; Defaults to true
; default_setting_show_list_icons=true

; Redirect to this page on login
; Defaults to none
; default_setting_start_page=none

; Don't prompt when deleting something
; Defaults to false
; default_setting_disable_delete_prompt=false

; Hide icons in the folder list
; Defaults to false
; default_setting_no_folder_icons=false

; Source max for the all email combined view
; Defaults to 20
; default_setting_all_email_per_source=20

; Per source time limit for the all email combined view
; Defaults to 1 week
; default_setting_all_email_since='-1 week'

; Per source time limit for the everything combined view
; Defaults to 1 week
; default_setting_all_since='-1 week'

; Per source max for the everything combined view
; Defaults to 20
; default_setting_all_per_source=20

; Per source max for the unread combined view
; Defaults to 20
; default_setting_unread_per_source=20

; Per source max for the flagged combined view
; Defaults to 20
; default_setting_flagged_per_source=20

; Per source time limit for the flagged combined view
; Defaults to 1 week
; default_setting_flagged_since='-1 week'

; Per source time limit for the unread combined view
; Defaults to 1 week
; default_setting_unread_since='-1 week'

; Timezone for date displays
; Defaults to UTC
; default_setting_timezone='UTC'

; Message list format style
; Defaults to email client style
; default_setting_list_style='email_style'

; Interface language
; Defaults to en (English)
; default_setting_language='en'

; Hide new news feed items from the unread combined view
; Defaults to false
; default_setting_unread_exclude_feeds=false

; Per source max for news feeds
; Defaults to 20
; default_setting_feed_limit=20

; Per source time limit for news feeds
; Defaults to 1 week
; default_setting_feed_since='-1 week'

; Toggle between plain text or HTML formatted mail on the compose page
; Defaults to 0 (plain text)
; default_setting_smtp_compose_type=0

; BCC a copy of outbound mail to the sender
; Defaults to false
; default_setting_smtp_auto_bcc=false

; UI theme
; Defaults to the default white one ("White Bread")
; default_setting_theme='default'

; Hide WordPress notifications from the unread combined view
; Defaults to false
; default_setting_unread_exclude_wordpress=false

; Time limit for WordPress notifications
; Defaults to 1 week
; default_setting_wordpress_since='-1 week'

; Hide Github notifications from the unread combined view
; Defaults to false
; default_setting_unread_exclude_github=false

; Max per source for Github notifications
; Defaults to 20
; default_setting_github_limit=20

; Per source time limit for Github notifications
; Defaults to 1 week
; default_setting_github_since='-1 weeks'

; Display message details inline from the message list
; Defaults to false
; default_setting_inline_message=false

; Enable keyboard shortcuts
; Defaults to false
; default_setting_enable_keyboard_shortcuts=1

``

I tried to tweak several options from the hm3.ini with no luck.
If something rings a bell or sound odd with new pair of eyes, please let me know ^^

Other questions:

  1. What means the statement "TRANSLATION NOT FOUND", as in "TRANSLATION NOT FOUND :Attachment Chunks:"
``

2023-01-29 21:12:58 172.24.0.2 - 29/Jan/2023:20:12:58 +0000 "GET /index.php" 200
2023-01-29 21:12:58 (
2023-01-29 21:12:58 [0] => Using Hm_DB_Session with Hm_Auth_DB
2023-01-29 21:12:58 [1] => Using DB user configuration
2023-01-29 21:12:58 [2] => Using sapi: fpm-fcgi
2023-01-29 21:12:58 [3] => Request type: HTTP
2023-01-29 21:12:58 [4] => Request path: /
2023-01-29 21:12:58 [5] => TLS request: 1
2023-01-29 21:12:58 [6] => Mobile request: 0
2023-01-29 21:12:58 [7] => Page ID: settings
2023-01-29 21:12:58 [8] => CACHE backend using: noop
2023-01-29 21:12:58 [9] => Connecting to dsn: sqlite:/var/lib/hm3/cypht.db
2023-01-29 21:12:58 [10] => LOGGED IN
2023-01-29 21:12:58 [11] => TRANSLATION NOT FOUND :Attachment Chunks:
2023-01-29 21:12:58 [12] => TRANSLATION NOT FOUND :Farsi:
2023-01-29 21:12:58 [13] => TRANSLATION NOT FOUND :Estonian:
2023-01-29 21:12:58 [14] => TRANSLATION NOT FOUND :Indonesian:
2023-01-29 21:12:58 [15] => TRANSLATION NOT FOUND :Too Dark:
2023-01-29 21:12:58 [16] => TRANSLATION NOT FOUND :Don't flag a message as read on open:
2023-01-29 21:12:58 [17] => TRANSLATION NOT FOUND :Default message sort order:
2023-01-29 21:12:58 [18] => TRANSLATION NOT FOUND :Unable to generate 2 factor authentication QR code:
2023-01-29 21:12:58 [19] => PHP version 8.1.15RC1
2023-01-29 21:12:58 [20] => Zend version 4.1.15RC1
2023-01-29 21:12:58 [21] => Peak Memory: 8192
2023-01-29 21:12:58 [22] => PID: 68
2023-01-29 21:12:58 [23] => Included files: 77
2023-01-29 21:12:58 )

``

2. Is the version given in the doc (https://github.com/jasonmunro/cypht/archive/master.zip) the latest cypher version available?

Thank you.

Originally created by @MrNonoss on GitHub (Jan 29, 2023). Original GitHub issue: https://github.com/cypht-org/cypht/issues/668 ## 💬 Question <!-- Describe your Question in detail. Include screenshots and drawings if needed. --> Hi all, I have been struggling for two days making cypht work. Maybe someone here can point me to the right direction. My goal is to get a working docker version, with Caddy webserver, PHP8, redis and an Sqlite database. I know there's already a docker version, but pretty outdated and not really functional. ### ISSUE I got: - functional login screen, - functional database connectivity - database setup correctly, with all needed tables - code 200 server response when login I have not: - functional redis instance (for now, redis and memcached are disables to avoid traces in logs) - being able to go batons the login screen, which is the real problem ### SETUP Docker is working fine on a MacOS host (my testing device), and I have been able to go once behind the login screen, but cannot reproduce. In the hm3.ini, I have setup session, authentication and settings to DB and I followed all the instructions [here](https://cypht.org/install.html) ### LOGS <details> <summary>Safari logs from developper tools</summary> `` Summary URL: http://localhost/mail-debug/ URL: http://localhost/mail-debug/?page=message_list&list_path=unread Status: 200 OK Source: Network Address: ::1:80 Request POST /mail-debug/ Referer: http://localhost/mail-debug/ Origin: http://localhost Content-Type: application/x-www-form-urlencoded Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.2 Safari/605.1.15 Redirect Response 303 See Other Location: ?page=message_list&list_path=unread Date: Sun, 29 Jan 2023 18:13:38 GMT Request GET /mail-debug/ HTTP/1.1 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Cookie: phpMyAdmin=1b33791664103dbe49fe274ec78904ad; pmaUser-1=43Okg0TLsm3w8HMdDMhEKUFLMcP1nfXu6ctGOEkkZAVItQlsxaEyO%2FnVN8ojounc; pma_lang=en Accept-Language: en-GB,en;q=0.9 Upgrade-Insecure-Requests: 1 Host: localhost User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.2 Safari/605.1.15 Referer: http://localhost/mail-debug/ Accept-Encoding: gzip, deflate Connection: keep-alive Response HTTP/1.1 200 OK Transfer-Encoding: Identity Content-Type: text/html; charset=UTF-8 Date: Sun, 29 Jan 2023 18:13:38 GMT X-Powered-By: PHP/8.1.15RC1 Server: Caddy `` </details> <details> <summary>PHP logs when login</summary> `` 2023-01-29 19:13:38 NOTICE: PHP message: Array 2023-01-29 19:13:38 172.24.0.2 - 29/Jan/2023:18:13:38 +0000 "POST /index.php" 303 2023-01-29 19:13:38 ( 2023-01-29 19:13:38 [0] => Using Hm_DB_Session with Hm_Auth_DB 2023-01-29 19:13:38 [1] => Using DB user configuration 2023-01-29 19:13:38 [2] => Using sapi: fpm-fcgi 2023-01-29 19:13:38 [3] => Request type: HTTP 2023-01-29 19:13:38 [4] => Request path: /mail-debug/ 2023-01-29 19:13:38 [5] => TLS request: 0 2023-01-29 19:13:38 [6] => Mobile request: 0 2023-01-29 19:13:38 [7] => Page ID: home 2023-01-29 19:13:38 [8] => CACHE backend using: noop 2023-01-29 19:13:38 [9] => Connecting to dsn: sqlite:/var/lib/hm3/cypht.db 2023-01-29 19:13:38 [10] => Setting cookie: name: hm_id, lifetime: 0, path: /mail-debug/, domain: localhost, secure: , html_only 1 2023-01-29 19:13:38 [11] => Setting cookie: name: hm_session, lifetime: 0, path: /mail-debug/, domain: localhost, secure: , html_only 1 2023-01-29 19:13:38 [12] => LOGGED IN 2023-01-29 19:13:38 [13] => CACHE: miss for "feed_read_uids" using noop 2023-01-29 19:13:38 [14] => CACHE: saving "nux_dev_news" using noop 2023-01-29 19:13:38 [15] => Redirecting to ?page=message_list&list_path=unread 2023-01-29 19:13:38 [16] => PHP version 8.1.15RC1 2023-01-29 19:13:38 [17] => Zend version 4.1.15RC1 2023-01-29 19:13:38 [18] => Peak Memory: 8192 2023-01-29 19:13:38 [19] => PID: 8 2023-01-29 19:13:38 [20] => Included files: 78 2023-01-29 19:13:38 ) 2023-01-29 19:13:38 NOTICE: PHP message: Array 2023-01-29 19:13:38 172.24.0.2 - 29/Jan/2023:18:13:38 +0000 "GET /index.php" 200 2023-01-29 19:13:38 ( 2023-01-29 19:13:38 [0] => Using Hm_DB_Session with Hm_Auth_DB 2023-01-29 19:13:38 [1] => Using DB user configuration 2023-01-29 19:13:38 [2] => Using sapi: fpm-fcgi 2023-01-29 19:13:38 [3] => Request type: HTTP 2023-01-29 19:13:38 [4] => Request path: /mail-debug/ 2023-01-29 19:13:38 [5] => TLS request: 0 2023-01-29 19:13:38 [6] => Mobile request: 0 2023-01-29 19:13:38 [7] => Page ID: message_list 2023-01-29 19:13:38 [8] => CACHE backend using: noop 2023-01-29 19:13:38 [9] => TRANSLATION NOT FOUND :Cypht: 2023-01-29 19:13:38 [10] => PHP version 8.1.15RC1 2023-01-29 19:13:38 [11] => Zend version 4.1.15RC1 2023-01-29 19:13:38 [12] => Peak Memory: 8192 2023-01-29 19:13:38 [13] => PID: 7 2023-01-29 19:13:38 [14] => Included files: 81 2023-01-29 19:13:38 ) `` </details> <details> <summary>hm3.ini</summary> `` ; ----------------------------------------------------------------------------- ; General settings ; ----------------------------------------------------------------------------- ; Session Type ; ------------ ; Sessions are how the server maintains your logged in state. Cypht supports ; standard PHP sessions, as well as its own completely independent session ; system that uses memcached or a database for storage. In order to use ; database sessions, the database must be correctly configured in the "DB ; Support" section and the hm_user_session table must be created. In order to ; use Memcached sessions, the memcached server must be correctly configured ; in the "Memcached Support" section. In order to use Redis session, the ; Redis server must be configured in the "Redis Support" section. ; ; Valid values for this setting: ; ; PHP Standard PHP session handlers ; DB Custom database based sessions ; MEM Custom Memcached based sessions ; REDIS Custom Redis based sessions ; custom Create your own session class. See the modules/site/lib.php file for ; more info ; session_type=DB ; Authentication Type ; ------------------- ; This setting defines how Cypht will authenticate your username and password ; when you login. If you want to use a database it must be correctly configured ; in the "DB Support" section and the hm_user table must be created. There are ; 3 PHP cli scripts to help manage database users in the scripts/ directory ( ; create_account.php, delete_account.php, and update_password.php). If you want ; to authenticate against an IMAP server, you must setup the imap_auth_* settings ; below. If you want to authenticate against a POP3 server, you must setup the ; pop3_auth_* settings below. If you want to authenticate against an LDAP server, ; you must setup the ldap_auth_* settings. Finally, if you want to let users ; pick from a list of popular mail services or try to auto-discover a mail ; system, set this to dynamic and make sure the dynamic_login module set is ; enabled in the "Module Sets" section of this file. ; ; Valid values for this setting: ; ; DB Authenticate against the database ; LDAP Authenticate against an LDAP server ; IMAP Authenticate using an IMAP server ; POP3 Authenticate using a POP3 server ; dynamic Let the user choose from a list, or try to auto discover the mail ; services based on the email domain ; custom Create your own auth class. See the modules/site/lib.php file for ; more info ; auth_type=DB ; LDAP Authentication ; ------------------- ; If auth_type is set to LDAP, configure the LDAP server to authenticate against ; with the following settings, otherwise these are ignored. ; ; The hostname or IP address of the LDAP server to authenticate to ldap_auth_server=localhost ; The port the LDAP server is listening on. ldap_auth_port=389 ; Enable TLS/SSL connections. Leave blank or set to false to disable. Set to ; true to enable TLS connections. ldap_auth_tls= ; The "base dn" of the LDAP server ldap_auth_base_dn="example,dc=com" ; IMAP Authentication ; ------------------- ; If auth_type is set to IMAP, configure the IMAP server to authenticate against ; with the following settings, otherwise these are ignored. ; ; This is just a label used in the UI. It can be set to anything imap_auth_name=localhost ; The hostname or IP address of the IMAP server to authenticate to imap_auth_server=localhost ; The port the IMAP server is listening on. imap_auth_port=143 ; Enable TLS/SSL connections. Leave blank or set to false to disable. Set to ; true to enable TLS connections. If you want to use IMAP STARTTLS, do NOT ; enable this. This is only for TLS enabled sockets (typically on port 993). imap_auth_tls= ; POP3 Authentication ; ------------------- ; if auth_type is set to POP3, configure the POP3 server to authenticate against ; with the following settings, otherwise these are ignored. ; ; This is just a label used in the UI. It can be set to anything pop3_auth_name=localhost ; The hostname or IP address of the POP3 server to authenticate to pop3_auth_server=localhost ; The port the POP3 server is listening on. pop3_auth_port=110 ; Enable TLS/SSL connections. Leave blank or set to false to disable. Set to ; true to enable TLS connections. pop3_auth_tls= ; Default SMTP Server ; ------------------- ; You can set a default SMTP server for all Cypht users. Authentication will be ; done with the users login credentials, so this only makes sense if you are ; using POP3 or IMAP for authentication. Leave these values blank to disable a ; default SMTP server, otherwise fill in the required values below ; ; This is just a label used in the UI. It can be set to anything default_smtp_name= ; The hostname or IP address of the SMTP server default_smtp_server= ; The port the SMTP server is listening on. default_smtp_port= ; Enable TLS/SSL connections. Leave blank or set to false to disable. Set to ; true to enable TLS connections. default_smtp_tls= ; If your SMTP service does not require authentication, you can disable it ; by setting the following to true. default_smtp_no_auth= ; Settings Storage ; ---------------- ; Cypht supports 3 methods for saving user settings between logins. File based ; settings, database table or custom implementation. To store settings in a ; database, it must be configured in the "DB Support" section and the ; hm_user_settings table must be created. To store settings on the filesystem, ; the user_settings_dir must be created and the webserver software must be able ; to write to it. For custom implementations, see Hm_User_Config_File. ; ; Valid values for this setting: ; ; file Store user settings in the filesystem ; DB Store user settings in a database ; custom Store user settings via custom implementation. Specify class name ; after colon, e.g. custom:Custom_User_Config ; user_config_type=DB ; Settings Location ; ----------------- ; If user_config_type is set to file, this must be set to an existing directory ; that the webserver software can read and write to. If settings storage is set ; to DB, this is ignored. It should not be inside the webserver document root. user_settings_dir=/var/lib/hm3/users ; Attachment Location ; ------------------- ; Cypht needs a temporary place to store attachments that are to be sent with ; an outgoing message. This folder must exist and be writable by the webserver ; software. It should not be inside the webserver document root. attachment_dir=/var/lib/hm3/attachments ; Application Data Location ; ------------------------- ; Some Cypht module sets have their own ini files that need to be readable by ; the webserver software, but not writable, and definitely not inside the ; webserver document root. app_data_dir=/var/lib/hm3/app_data ; Disable origin check ; -------------------- ; To help protect against CSRF attacks, Cypht checks origin headers to confirm ; that the source and target origin domains match. If you are using proxies this ; could create a problem making it impossible to login. Change this to true to ; disable the origin check. disable_origin_check=true ; Admin Users ; ---------- ; You can define a comma delimited list of admin users that Cypht will grant ; special rights to. Currently this only enables the "create account" link in ; the account module set that provides a form to create a new account. This is ; only used if the auth_type is set to DB. Leave this blank if you don't want ; to define any admin users, or are using IMAP or POP3 authentication. admin_users= ; Cookie Domain ; ------------- ; By default Cypht uses the server name used in the request to determine ; the domain name to set the cookie for. Configurations that use a reverse ; proxy might need to define the domain name used for cookies. Leave this ; blank to let Cypht automatically determine the domain. You can also use ; the special value of "none" to force Cypht to NOT set the cookie domain ; property at all. This is not recommended unless you know what you are ; doing! cookie_domain= ; Cookie Path ; ------------- ; By default Cypht uses the request URI to determine the cookie path to set ; the cookie for. Configurations that use mod_rewrite might need to define ; the path used for cookies. E.g. /cypht/embedded?page=compose will set path ; to /cypht/embedded/ which won't send the cookies back to the server. In that ; case set cookie_path=/cypht/. Leave this blank to let Cypht automatically ; determine the path. You can also use the special value of "none" to force ; Cypht to NOT set the cookie path property at all. This is not recommended ; unless you know what you are doing! cookie_path= ; Outbound Email Domain ; ---------------------- ; Default domain used for outbound email addresses when using IMAP auth and ; users don't login with a full email address. Users can customize this with ; the profiles module which will override this default default_email_domain= ; Auto-Create Profile ; ------------------- ; When a user logs in and they have only 1 IMAP server and 1 SMTP server, and ; no configured profiles - enabling this option will auto-create a profile for ; them. Email and reply-to addresses will use the default_email_domain if ; set, otherwise it will fallback to the domain Cypht is hosted on. autocreate_profile= ; Redirect After Login ; -------------------- ; You can login directly to any page in Cypht by going to the correct url before ; logging in, but that is not very user-friendly. To redirect users to a url ; after login, add the url arguments below (everything in the url after, but ; including, the question mark). You must use double quotes around the value ; otherwise it will cause an ini parsing error. To redirect users after login ; to the combined unread view you would use: ; ; redirect_after_login="?page=message_list&list_path=unread" redirect_after_login="?page=message_list&list_path=unread" ; Application Name ; ---------------- ; This label is used in the UI to reference the program - you can change it to ; "Your awesome webmail" to replace the Cypht name used in various places. app_name=Cypht ; Force Mobile UI ; --------------- ; Cypht will detect mobile devices and display a mobile optimized UI. If you want ; to aways use this UI regardless of device, set this to true always_mobile_ui= ; Default Language ; ---------------- ; Users can select from available interface languages on the site settings page. ; This sets the default for a user who has not done so. Valid values are 2 character ; langauge codes that have matching language definitions in the language/ folder. default_language=en ; JavaScript Compression ; ---------------------- ; When the configuration script is run, all JavaScript files are concatenated ; and optionally compressed. To compress the content, define a command and its ; options below. Cypht does not come with compresson software, so you must ; install and configure that separately. Leave blank or set to false to disable ; external compression. Compression software must be able to handle ES6. ; ; Example: ; js_compress='uglifyjs.terser -c -m --verbose --warn' ; js_compress=false ; CSS Compression ; --------------- ; When the configuration script is run, all CSS files are concatenated and ; optionally compressed. To compress the content, define a command and its ; options below. Cypht does not come with compresson software, so you must ; install and configure that separately. Leave blank or set to false to disable ; external compression. ; ; Example: ; css_compress='java -jar /usr/local/lib/yuicompressor-2.4.8.jar --type css' ; css_compress=false ; Caching Server Support ; --------------------- ; Cypht can use Redis or Memcache to improve performance, as well as to store ; user sessions. Configure Redis or Memcached below and Cypht will ; automatically use them for caching. All data cached for a user in either ; system is encrypted. Currently, the feeds, POP3, and IMAP modules will use ; the configured cache. If both Redis and Memcached are configured, Redis will ; be used for the cache. ; ; If you want to use the user session as a cache, uncomment the line below and ; set to true. THIS IS NOT RECOMMENDED. Cypht uses parallel requests to the ; server, and using the session as a cache is likely to cause race conditions ; and integrity issues. If you are running Cypht in an "embedded" mode with ; only one email source, this option is less likely to be a problem. ; allow_session_cache=false ; Redis Support ; ------------- ; Configure Redis details below to use it for caching enable_redis=false redis_server=127.0.0.1 redis_port=6379 redis_index=1 redis_pass= redis_socket=/tmp/sock/redis.sock ; Memcached Support ; ----------------- ; Configure Memcached details below to use it for caching enable_memcached=false memcached_server=127.0.0.1 memcached_port=11211 ; If you need SASL authentication for memcached, set the following to true ; and add the username and password to authenticate with memcached_auth=false memcached_user= memcached_pass= ; Allow Long Sessions ; ------------------- ; Cypht logins only last as long as the browser is open. Closing the browser, ; or moving to a new network, will cause you to be logged out. This setting ; provides users with a "stay logged in" option during login that will set the ; sesison lifetime to a default of 30 days, and disable the IP address check. ; ; USE WITH CAUTION SINCE THIS DISABLES SOME SESSION PROTECTIONS. ; ; Specifically: ; ; - Session cookies stay active after a browser restart making them more ; susceptible to snooping ; - The browser "fingerprint" was use to help protect against session hijacking ; includes the client's IP. With this option enabled a client IP can change ; mid-session and it won't log them out allow_long_session=false ; Set the session lifetime in days. Only applies if allow_long_session is set to ; true, and a user checks the box to "stay logged in" during login. long_session_lifetime=30 ; Browser Encryption Options ; -------------------------- ; Cypht can use the Forge JavaScript encryption library to encrypt AJAX ; responses and data stored in browser local storage. Enabling either one of ; these options causes the Forge JavaScript library to be included. This adds ; about 70KB to the page size (when gzipped). ; Use AES encryption for AJAX responses. Set to true to enable, leave blank or ; set to false to disable. encrypt_ajax_requests= ; Use AES encryption for data stored in the browser local storage. Set to true ; to enable, or leave blank or set to false to disable. encrypt_local_storage= ; Allow client IP changes ; ----------------------- ; By default Cypht will log you out if your client IP address changes. This is ; an extra layer of protection against session hijacking, but it's not uncommon ; for your client IP to change. Change this to true if you want to disable this ; check disable_ip_check=false ; Allow remote image sources ; -------------------------- ; ; WARNING: Using this feature could leak information to external sources. ; ; By default, Cypht will not allow external images to be loaded when viewing an ; HTML formatted email message. A Content Security Policy header limits images ; sources to "self" only and the message content is filtered to remove any external ; resource. If you really want the ability to view external images in an email, ; you first need to change the following setting to true. When viewing an HTML ; formatted message, you will now have a link before the message body called "Allow ; Images" that will reload the message part with external images visible. allow_external_image_sources=true ; ; Single server mode ; ------------------ ; This setting restricts Cypht to only using a single email source (POP3 or ; IMAP) and the default SMTP server defined in this file. It modifies the UI to ; remove the ability to add other email sources, and removes the password ; restriction when saving data between logins. You must use either IMAP or POP3 ; authentication for this setting to be enforced, and auth server will be the ; single email source users have access to. If you enable this after users ; have saved any settings, they will be lost (or if you disable it after they ; have saved any settings). WARNING: USER SETTINGS SAVED TO THE SERVER WILL NOT ; BE ENCRYPTED WITH THIS ENABLED single_server_mode=false ; Integration options ; ------------------- ; Cypht does a few things to make it more secure by default, but these features ; can make it difficult to integrate Cypht into 3rd party software. Specifically, ; Cypht disables PHP "super globals", and sets a restrictive PHP "open basedir" ; setting, tweaks PHP ini settings to increase security, and uses a browser ; "fingerprint" to improve session security. You can disable each with the ; following options: ; Don't empty PHP super globals disable_empty_superglobals=false ; Don't apply open basedir restrictions disable_open_basedir=true ; Don't tweak ini settings disable_ini_settings=false ; Don't use a browser fingerprint disable_fingerprint=false ; You can create your own custom authentication and session classes using the ; site module set, however you might want those classes located somewhere else ; outside of the Cypht code base. By setting session_type and auth_type to custom, ; you can control what class is used with the following settings ; auth_class= ; session_class= ; ----------------------------------------------------------------------------- ; DB Support ; ----------------------------------------------------------------------------- ; Database Support ; ---------------- ; Cypht can use a database for 3 different purposes: authentication, sessions, ; and user settings. Each requires the following settings to be configured and ; the correct table to be created. CREATE TABLE SQL statements for MySQL and ; Postgresql are below. ; ; Connection type. Can be "host" to connect to a hostname, or "socket" to ; connect to a unix socket. db_connection_type=socket ; Database host name or ip address. If db_connection_type is set to "socket", ; this value is ignored db_host=127.0.0.1 ; Database port. Only needed if your database is running on a non-standard ; port db_port= ; If db_connection_type is set to "socket", this should be the filesystem ; location of the unix socket file. If db_connection_type is set to "host" ; this value is ignored. db_socket=/var/lib/hm3/cypht.db ; Name of the database with the required tables db_name=cypht.db ; User to connect to the database with db_user= ; Password to connect to the database with db_pass= ; Database type. can be any supported PDO driver ; (http://php.net/manual/en/pdo.drivers.php) db_driver=sqlite ; DB Sessions ; ----------- ; If your session_type is set to DB, the following table must exist in the DB ; defined above, and the db user must have read-write access to it: ; ; Postgresql: ; CREATE TABLE hm_user_session (hm_id varchar(250) primary key not null, data text, date timestamp); ; ; MySQL or SQLite: ; CREATE TABLE hm_user_session (hm_id varchar(180), data longblob, date timestamp, primary key (hm_id)); ; DB Authentication ; ----------------- ; If your auth_type is set to DB, the following table must exist in the DB ; defined above, and the db user must have read-write access to it: ; ; Postgresql: ; CREATE TABLE hm_user (username varchar(255) primary key not null, hash varchar(255)); ; ; MySQL or SQLite: ; CREATE TABLE hm_user (username varchar(250), hash varchar(250), primary key (username)); ; DB Settings ; ----------- ; If your user_config_type is set to DB, the following table must exist in the ; DB defined above, and the db user must have read-write access to it: ; ; Postgresql: ; CREATE TABLE hm_user_settings (username varchar(250) primary key not null, settings text); ; ; MySQL or SQLite: ; CREATE TABLE hm_user_settings(username varchar(250), settings longblob, primary key (username)); ; ----------------------------------------------------------------------------- ; Modules ; ----------------------------------------------------------------------------- ; Module Sets ; ----------- ; Cypht uses module sets to separate functionality in the program. Module sets ; can be enabled and disabled independently by commenting out or uncommenting ; the assignments below. Add a new assignment to enable your own module sets. ; Core ; ---- ; Handles page layout, login/logout, and the default settings pages. This set ; is required. modules[]=core ; Contacts ; ------- ; Contact support. This module requires that at least one "backend" contacts ; module be enabled (ldap_contacts, gmail_contacts, or local_contacts). You ; can enable all the backends you want to support. modules[]=contacts ; Local contact support. Simple, locally stored contacts backend modules[]=local_contacts ; LDAP contact support. Use an LDAP server to store contacts. This module ; uses its own ini file in modules/ldap_contacts/. This file must be edited ; and moved to your app_data_dir to configure LDAP access. ; modules[]=ldap_contacts ; Gmail contact support. Read-only support for Gmail contacts. Only available ; if you have a Gmail account enabled that uses OAuth2 authentication ; modules[]=gmail_contacts ; Feeds ; ----- ; RSS/ATOM feed support modules[]=feeds ; POP3 ; ---- ; POP3 email account support ; modules[]=pop3 ; IMAP ; ---- ; IMAP email account support. If you want to use OAuth2 over IMAP (currently ; only supported by Gmail and Outlook.com), you will need to edit the oauth2.ini ; file in modules/imap/, and move it to your app_data_dir location. modules[]=imap ; 2 factor authentication ; ----------------------- ; This module enables 2 factor authentication using TOTP (compatible with ; Google Authenticator). You must edit the ini file in modules/2fa/ to ; configure a shared secret, then move that file to your app_data_dir. modules[]=2fa ; SMTP ; ---- ; Send outbound email using SMTP servers modules[]=smtp ; Account ; ------ ; UI features for admins to create accounts, and for users to update passwords ; (when using the built-in DB authentication) modules[]=account ; Idle timer ; --------- ; Controls idle time and automatic logout modules[]=idle_timer ; Desktop notifications ; --------------------- ; Enable desktop notifications for new messages modules[]=desktop_notifications ; Calendar ; ------- ; Basic calendar modules[]=calendar ; Themes ; ------ ; Change the UI using CSS modules[]=themes ; NUX ; --- ; Friendly new user experience. Quickly add common email services, and view ; development updates modules[]=nux ; Developer ; --------- ; For development, provides resources and installation details. Only available ; in "debug mode" modules[]=developer ; Github ; ------ ; Github repository tracking. This module has its own ini file located in ; modules/github/. You must edit this file, and move it to your app_data_dir ; to establish communication with github. ; modules[]=github ; reCAPTCHA ; --------- ; Use the reCAPTCHA server on login. This module has its own ini file in ; modules/recaptcha/. You must edit this file, and move it to the location ; defined in app_data_dir to gain access to the WordPress notification API. ; modules[]=recaptcha ; WordPress ; --------- ; WordPress.com notifications. This module has its own ini file in ; modules/wordpress/. You must edit this file, and move it to the location ; defined in app_data_dir to gain access to the WordPress notification API. ; modules[]=wordpress ; History ; ------- ; Simple list of messages read since login modules[]=history ; Saved searches ; -------------- ; Save and re-run searches easily modules[]=saved_searches ; Advanced search ; --------------- ; Enable the advanced search form modules[]=advanced_search ; Message highlighting ; -------------------- ; Create custom rules to highlight messages in lists with different colors modules[] = highlights ; NASA ; ---- ; Access the NASA APOD API content ; modules[]=nasa ; Profiles ; -------- ; Profiles to set reply-to, name, and signature to associated email accounts modules[]=profiles ; Inline message ; -------------- ; View messages inline in a reading pane instead of on a new page modules[]=inline_message ; IMAP folders ; ----------- ; Support for adding/renaming/deleting folders in IMAP accounts modules[]=imap_folders ; Keyboard Shortcuts ; ------------------ ; Enables configurable keyboard shortcuts for navigations and actions modules[]=keyboard_shortcuts ; Sieve Filters ; ------------------ ; Enables configurable Sieve based IMAP filters ; modules[]=sievefilters ; Site ; ---- ; Site specific overrides. Used to control other module sets without hacking ; the code. ; modules[]=site ; Dynamic login ; ------------- ; Allows user to authenticate against a list of popular mail services, or to ; auto-discover the services for the specified email address. The auth_type ; setting must be set to "dynamic", otherwise this module set does not do ; anything ; modules[]=dynamic_login ; API login ; -------- ; Allows an API based login that returns a JSON response containing the session ; and hm_id values needed to create a login session. You will need to set the ; api_login_key value to something unique and include that in the POST request. ; modules[]=api_login ; api_login_key= ; Recover settings ; ---------------- ; When using IMAP or POP3 authentication, if a user's password is changed, we ; can't decrypt the existing user settings. This module detects that situation ; and provides a page where a user can enter their old and new passwords to ; recover their previous settings. ; modules[]=recover_settings ; Hello World ; ----------- ; Example module set with lots of comments ; modules[]=hello_world ; ----------------------------------------------------------------------------- ; User Defaults ; All of these settings can be changed by users, but you can uncomment and set ; the default behavior using the following options. This will only effect new ; users or ones that have never saved their settings. ; ; Per source time limits have valid values of: ; -1 day ; -1 week ; -2 weeks ; -4 weeks ; -6 weeks ; -6 months ; -1 year ; -5 years ; ; Per source maximums can be from 1 to 1000 ; ----------------------------------------------------------------------------- ; If set to true, passwords for email accounts will never be saved between logins ; Defaults to false ; default_setting_no_password_save=false ; Number of messages per page when viewing IMAP folders ; Defaults to 20 ; default_setting_imap_per_page=20 ; Amount of IMAP message structure detail on the message view page ; Defaults to full structure ; default_setting_simple_msg_parts=false ; Next and Previous emails on the message view page ; Defaults to full structure ; default_setting_pagination_links=true ; Show icons for each IMAP message part type ; Defaults to true ; default_setting_msg_part_icons=true ; Prefer text parts when viewing a message ; Defaults to false ; default_setting_text_only=false ; Per source max for the combined sent view ; Defaults to 20 ; default_setting_sent_per_source=20 ; Per source time limit for the combined sent view ; Defaults to 1 week ; default_setting_sent_since='-1 week' ; Display source icons in message lists ; Defaults to true ; default_setting_show_list_icons=true ; Redirect to this page on login ; Defaults to none ; default_setting_start_page=none ; Don't prompt when deleting something ; Defaults to false ; default_setting_disable_delete_prompt=false ; Hide icons in the folder list ; Defaults to false ; default_setting_no_folder_icons=false ; Source max for the all email combined view ; Defaults to 20 ; default_setting_all_email_per_source=20 ; Per source time limit for the all email combined view ; Defaults to 1 week ; default_setting_all_email_since='-1 week' ; Per source time limit for the everything combined view ; Defaults to 1 week ; default_setting_all_since='-1 week' ; Per source max for the everything combined view ; Defaults to 20 ; default_setting_all_per_source=20 ; Per source max for the unread combined view ; Defaults to 20 ; default_setting_unread_per_source=20 ; Per source max for the flagged combined view ; Defaults to 20 ; default_setting_flagged_per_source=20 ; Per source time limit for the flagged combined view ; Defaults to 1 week ; default_setting_flagged_since='-1 week' ; Per source time limit for the unread combined view ; Defaults to 1 week ; default_setting_unread_since='-1 week' ; Timezone for date displays ; Defaults to UTC ; default_setting_timezone='UTC' ; Message list format style ; Defaults to email client style ; default_setting_list_style='email_style' ; Interface language ; Defaults to en (English) ; default_setting_language='en' ; Hide new news feed items from the unread combined view ; Defaults to false ; default_setting_unread_exclude_feeds=false ; Per source max for news feeds ; Defaults to 20 ; default_setting_feed_limit=20 ; Per source time limit for news feeds ; Defaults to 1 week ; default_setting_feed_since='-1 week' ; Toggle between plain text or HTML formatted mail on the compose page ; Defaults to 0 (plain text) ; default_setting_smtp_compose_type=0 ; BCC a copy of outbound mail to the sender ; Defaults to false ; default_setting_smtp_auto_bcc=false ; UI theme ; Defaults to the default white one ("White Bread") ; default_setting_theme='default' ; Hide WordPress notifications from the unread combined view ; Defaults to false ; default_setting_unread_exclude_wordpress=false ; Time limit for WordPress notifications ; Defaults to 1 week ; default_setting_wordpress_since='-1 week' ; Hide Github notifications from the unread combined view ; Defaults to false ; default_setting_unread_exclude_github=false ; Max per source for Github notifications ; Defaults to 20 ; default_setting_github_limit=20 ; Per source time limit for Github notifications ; Defaults to 1 week ; default_setting_github_since='-1 weeks' ; Display message details inline from the message list ; Defaults to false ; default_setting_inline_message=false ; Enable keyboard shortcuts ; Defaults to false ; default_setting_enable_keyboard_shortcuts=1 `` </details> I tried to tweak several options from the hm3.ini with no luck. If something rings a bell or sound odd with new pair of eyes, please let me know ^^ ### Other questions: 1. What means the statement "TRANSLATION NOT FOUND", as in "TRANSLATION NOT FOUND :Attachment Chunks:" <details> `` 2023-01-29 21:12:58 172.24.0.2 - 29/Jan/2023:20:12:58 +0000 "GET /index.php" 200 2023-01-29 21:12:58 ( 2023-01-29 21:12:58 [0] => Using Hm_DB_Session with Hm_Auth_DB 2023-01-29 21:12:58 [1] => Using DB user configuration 2023-01-29 21:12:58 [2] => Using sapi: fpm-fcgi 2023-01-29 21:12:58 [3] => Request type: HTTP 2023-01-29 21:12:58 [4] => Request path: / 2023-01-29 21:12:58 [5] => TLS request: 1 2023-01-29 21:12:58 [6] => Mobile request: 0 2023-01-29 21:12:58 [7] => Page ID: settings 2023-01-29 21:12:58 [8] => CACHE backend using: noop 2023-01-29 21:12:58 [9] => Connecting to dsn: sqlite:/var/lib/hm3/cypht.db 2023-01-29 21:12:58 [10] => LOGGED IN 2023-01-29 21:12:58 [11] => TRANSLATION NOT FOUND :Attachment Chunks: 2023-01-29 21:12:58 [12] => TRANSLATION NOT FOUND :Farsi: 2023-01-29 21:12:58 [13] => TRANSLATION NOT FOUND :Estonian: 2023-01-29 21:12:58 [14] => TRANSLATION NOT FOUND :Indonesian: 2023-01-29 21:12:58 [15] => TRANSLATION NOT FOUND :Too Dark: 2023-01-29 21:12:58 [16] => TRANSLATION NOT FOUND :Don't flag a message as read on open: 2023-01-29 21:12:58 [17] => TRANSLATION NOT FOUND :Default message sort order: 2023-01-29 21:12:58 [18] => TRANSLATION NOT FOUND :Unable to generate 2 factor authentication QR code: 2023-01-29 21:12:58 [19] => PHP version 8.1.15RC1 2023-01-29 21:12:58 [20] => Zend version 4.1.15RC1 2023-01-29 21:12:58 [21] => Peak Memory: 8192 2023-01-29 21:12:58 [22] => PID: 68 2023-01-29 21:12:58 [23] => Included files: 77 2023-01-29 21:12:58 ) `` </details> 2. Is the version given in the doc (https://github.com/jasonmunro/cypht/archive/master.zip) the latest cypher version available? Thank you.
kerem closed this issue 2026-02-25 21:35:01 +03:00
Author
Owner

@marclaporte commented on GitHub (Feb 1, 2023):

Yes, https://github.com/jasonmunro/cypht/archive/master.zip is the latest version.

<!-- gh-comment-id:1412920323 --> @marclaporte commented on GitHub (Feb 1, 2023): Yes, https://github.com/jasonmunro/cypht/archive/master.zip is the latest version.
Author
Owner

@kk6mrp commented on GitHub (Feb 2, 2023):

Everything looks good from a configuration point of view as far as I can tell, just make sure permissions are good on the database.

For mine, permissions look like so:

drwxr--r--    2 apache   root          4096 Jan 16 23:02 .
drwxr-xr-x    4 apache   root          4096 Jun  7  2021 ..
-rw-r--r--    1 apache   root         36864 Jan 16 23:02 cypht.db
<!-- gh-comment-id:1413204718 --> @kk6mrp commented on GitHub (Feb 2, 2023): Everything looks good from a configuration point of view as far as I can tell, just make sure permissions are good on the database. For mine, permissions look like so: ```bash drwxr--r-- 2 apache root 4096 Jan 16 23:02 . drwxr-xr-x 4 apache root 4096 Jun 7 2021 .. -rw-r--r-- 1 apache root 36864 Jan 16 23:02 cypht.db ```
Author
Owner

@marclaporte commented on GitHub (Feb 6, 2023):

Related discussion: https://gitter.im/cypht-org/community?at=63dc3df21bbc096730bb8b25

<!-- gh-comment-id:1418800609 --> @marclaporte commented on GitHub (Feb 6, 2023): Related discussion: https://gitter.im/cypht-org/community?at=63dc3df21bbc096730bb8b25
Author
Owner

@marclaporte commented on GitHub (Feb 24, 2023):

@MrNonoss "got SMTP to register by using the STARTTLS or unencrypted, while TLS worked fine for IMAP"

Bookmarks have changed because of https://blog.gitter.im/2023/02/13/gitter-has-fully-migrated-to-matrix/ so new source:
https://app.gitter.im/#/room/#cypht-org_community:gitter.im/$iPgeHCIzI0ZblEtKbIjW6kBVvWC_VVu2ygOt0I9ij0Y

<!-- gh-comment-id:1442852924 --> @marclaporte commented on GitHub (Feb 24, 2023): @MrNonoss "got SMTP to register by using the STARTTLS or unencrypted, while TLS worked fine for IMAP" Bookmarks have changed because of https://blog.gitter.im/2023/02/13/gitter-has-fully-migrated-to-matrix/ so new source: https://app.gitter.im/#/room/#cypht-org_community:gitter.im/$iPgeHCIzI0ZblEtKbIjW6kBVvWC_VVu2ygOt0I9ij0Y
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
starred/cypht#436
No description provided.