diff options
author | Ted Trask <ttrask01@yahoo.com> | 2015-03-30 16:13:12 -0400 |
---|---|---|
committer | Ted Trask <ttrask01@yahoo.com> | 2015-03-30 16:13:12 -0400 |
commit | 59364f1b5c84cf48ea98e9c4107dfa49b5eaac59 (patch) | |
tree | 2f0b90b286bb239e62652074dd0ff5da6f923f22 | |
parent | c206625279fe70e8239c85ced28d860bd6a4b3a6 (diff) | |
download | acf-freeswitch-vmail-59364f1b5c84cf48ea98e9c4107dfa49b5eaac59.tar.bz2 acf-freeswitch-vmail-59364f1b5c84cf48ea98e9c4107dfa49b5eaac59.tar.xz |
Added support for postgresql using DSN config (and making database config obsolete)
-rw-r--r-- | vmail-model.lua | 48 |
1 files changed, 38 insertions, 10 deletions
diff --git a/vmail-model.lua b/vmail-model.lua index 8897d42..2e85b85 100644 --- a/vmail-model.lua +++ b/vmail-model.lua @@ -11,17 +11,43 @@ session = require("session") -- Set variables local configfile = "/etc/freeswitchvmail.conf" +local recording_path = "/var/lib/freeswitch/voicemail/" +local db_path = "/var/lib/freeswitch/db/" local configcontent = fs.read_file(configfile) or "" local config = format.parse_ini_file(configcontent, "") or {} -config.database = config.database or "/var/lib/freeswitch/db/voicemail_default.db" +config.database = config.database or db_path.."voicemail_default.db" config.domain = config.domain or "voicemail" config.event_socket_ip = config.event_socket_ip or "127.0.0.1" config.event_socket_port = config.event_socket_port or "8021" config.event_socket_password = config.event_socket_password or "ClueCon" config.callback_command = config.callback_command or "originate {ignore_early_media=true,origination_caller_id_name='Voicemail',origination_caller_id_number='Voicemail'}sofia/gateway/asterlink.com/$1 &playback($2)" -local recording_path = "/var/lib/freeswitch/voicemail/" -local vmaildb = db.create(db.engine.sqlite3, config.database) +local vmaildb +local dbengine = db.engine.sqlite3 +if not config.dsn then + -- Backward compatible assumed sqlite3 with full path in config.database + config.dsn = "sqlite://"..config.database +end +if string.find(config.dsn, "^sqlite://") then + local params = string.match(config.dsn, "^sqlite://(.*)") or "" + if not string.find(params, "^/") then + params = db_path..params + end + vmaildb = db.create(dbengine, params) +elseif string.find(config.dsn, "^pgsql://") then + local params = string.match(config.dsn, "^pgsql://(.*)") or "" + dbengine = db.engine.postgresql + -- Sample params: hostaddr=127.0.0.1 dbname=freeswitch user=freeswitch password= options='-c client_min_messages=NOTICE' application_name='freeswitch' + -- Second sample: hostaddr=127.0.0.1 dbname=voicemail user=postgres password= options='' + local hostaddr = string.match(params, "hostaddr=(%S*)") or "127.0.0.1" + local dbname = string.match(params, "dbname=(%S*)") or "freeswitch" + local user = string.match(params, "user=(%S*)") + local password = string.match(params, "password=(%S*)") + vmaildb = db.create(dbengine, dbname, user, password, hostaddr) +else + -- Failure - we do not support ODBC database +end + vmaildb.table_creation_scripts = { voicemail_users = { "CREATE TABLE voicemail_users (uid INTEGER PRIMARY KEY, username VARCHAR(255) UNIQUE)", @@ -91,7 +117,9 @@ end local databasedisconnect = function() vmaildb.databasedisconnect() - posix.chown(config.database, posix.getpasswd("freeswitch", "uid") or 0, posix.getpasswd("freeswitch", "gid") or 0) + if dbengine == db.engine.sqlite3 then + posix.chown(vmaildb.database, posix.getpasswd("freeswitch", "uid") or 0, posix.getpasswd("freeswitch", "gid") or 0) + end end local generatewhereclause = function(username, message, foldername, uid) @@ -238,8 +266,8 @@ local function validateconfig(newconfig) newconfig.value.domain.errtxt = "Cannot be blank" success = false end - if newconfig.value.database.value == "" then - newconfig.value.database.errtxt = "Cannot be blank" + if newconfig.value.dsn.value == "" then + newconfig.value.dsn.errtxt = "Cannot be blank" success = false end if newconfig.value.event_socket_ip.value == "" then @@ -342,7 +370,7 @@ end mymodule.get_config = function() local result = {} result.domain = cfe({ value=config.domain, label="Domain" }) - result.database = cfe({ value=config.database, label="Database" }) + result.dsn = cfe({ value=config.dsn, label="Data Source Name (DSN)" }) result.event_socket_ip = cfe({ value=config.event_socket_ip, label="FS Event Socket IP" }) result.event_socket_port = cfe({ value=config.event_socket_port, label="FS Event Socket Port" }) result.event_socket_password = cfe({ value=config.event_socket_password, label="FS Event Socket Password" }) @@ -710,7 +738,7 @@ mymodule.set_delete_user = function(self, deleterequest) end mymodule.get_bunchsettings = function (self) - local bunch = cfe({ name="list", label="List", type="longtext", descr="Each line will be seen as a new extension. To separate fields make use of colons. Follow the formmat:\n\nExtension:Name:Lastname:Password"}) + local bunch = cfe({ name="list", label="List", type="longtext", descr="Each line will be seen as a new extension. To separate fields make use of colons. Follow the format:\n\nExtension:Name:Lastname:Password"}) return cfe({ type="group", value={bunch=bunch}, label="Voicemail Users List" }) end @@ -748,7 +776,7 @@ mymodule.set_bunchsettings = function (self, bunchdata) entry.value.lastname.value=lastname entry.value["vm-password"].value=password if validateentry(entry) then - sql = "INSERT INTO voicemail_users VALUES(null, '"..vmaildb.escape(username).."')" + sql = "INSERT INTO voicemail_users VALUES(default, '"..vmaildb.escape(username).."')" vmaildb.runsqlcommand(sql) sql = "SELECT uid FROM voicemail_users where username ='"..vmaildb.escape(username).."'"; uid = vmaildb.getselectresponse(sql) @@ -820,7 +848,7 @@ mymodule.update_usersettings = function(self, usersettings, action, create) errtxt = "User does not exist" else if create then - sql = "INSERT INTO voicemail_users VALUES(null, '"..vmaildb.escape(usersettings.value.username.value).."')" + sql = "INSERT INTO voicemail_users VALUES(default, '"..vmaildb.escape(usersettings.value.username.value).."')" vmaildb.runsqlcommand(sql) end success,errtxt = setuserparams(usersettings.value) |