ACF acf www example: Difference between revisions

From Alpine Linux
(minor updates)
m (→‎Get and configure ACF: Updated svn reference to git, fixed a path, used cmd and path templates. W.I.P.)
 
(One intermediate revision by one other user not shown)
Line 81: Line 81:




1. Grab a copy of all the acf code and support libraries from svn and copy into an "/usr/share/acf" directory
1. Grab a copy of all the acf code and support libraries from svn and copy into an {{path|/usr/share/acf}} directory


svn export svn://svn.alpinelinux.org/acf/core/trunk /usr/share/acf
{{cmd|git clone https://gitlab.alpinelinux.org/acf/acf-core.git /usr/share/acf}}


2. Copy the acf.conf file to /etc/acf
2. Copy the acf.conf file to {{path|/etc/acf}}


cp /usr/share/acf/acf.conf /etc/acf/acf.conf
{{cmd|# cp /usr/share/acf.conf /etc/acf/acf.conf}}


3. Start the web server  
3. Start the web server  
Line 96: Line 96:
Start mini_httpd (by hand for now)
Start mini_httpd (by hand for now)


  mini_httpd -d /usr/share/acf/www -c 'cgi-bin/**' start
{{cmd|# mini_httpd -d /usr/share/acf/www -c 'cgi-bin/**' start}}




4. Move your hostname model and controller
4. Move your hostname model and controller


  mkdir /usr/share/acf/app/sample
{{cmd|mkdir /usr/share/acf/app/sample<br>
  mv helloworld/app/hostname-* /usr/share/acf/app/sample/
mv helloworld/app/hostname-* /usr/share/acf/app/sample/}}


5. Create a new view template, which is a "lua server page"  Create the file as ''/usr/share/acf/app/sample/hostname-html.lsp''
5. Create a new view template, which is a "lua server page"  Create the file as {{path|/usr/share/acf/app/sample/hostname-html.lsp}}


  <? local form = ... ?>                                                                           
  <? local form = ... ?>                                                                           
Line 127: Line 127:


[[Category:ACF]]
[[Category:ACF]]
== private label cosmetics, custom made cosmetic, custom made cream, custom lip stick lip balm ==
Offers private label cosmetics with custom design. We produce lip balms, serum, creams and more. Easy to buy with eshop. Private label cosmetics, custom made cosmetic, custom made cream, custom lip stick lip balm
[[http://ultra-high-end.com/custom-made.html private label cosmetics, custom made cosmetic, custom made cream, custom lip stick lip balm]]
[[http://ultra-high-end.com/custom-made.html private label cosmetics, custom made cosmetic, custom made cream, custom lip stick lip balm]]
== private label cosmetics, custom made cosmetic, custom made cream, custom lip stick lip balm ==
Offers private label cosmetics with custom design. We produce lip balms, serum, creams and more. Easy to buy with eshop. Private label cosmetics, custom made cosmetic, custom made cream, custom lip stick lip balm
[[http://ultra-high-end.com/custom-made.html private label cosmetics, custom made cosmetic, custom made cream, custom lip stick lip balm]]
[[http://ultra-high-end.com/custom-made.html private label cosmetics, custom made cosmetic, custom made cream, custom lip stick lip balm]]
== private label cosmetics, custom made cosmetic, custom made cream, custom lip stick lip balm ==
Offers private label cosmetics with custom design. We produce lip balms, serum, creams and more. Easy to buy with eshop. Private label cosmetics, custom made cosmetic, custom made cream, custom lip stick lip balm
[[http://ultra-high-end.com/custom-made.html private label cosmetics, custom made cosmetic, custom made cream, custom lip stick lip balm]]
[[http://ultra-high-end.com/custom-made.html private label cosmetics, custom made cosmetic, custom made cream, custom lip stick lip balm]]
== private label cosmetics, custom made cosmetic, custom made cream, custom lip stick lip balm ==
Offers private label cosmetics with custom design. We produce lip balms, serum, creams and more. Easy to buy with eshop. Private label cosmetics, custom made cosmetic, custom made cream, custom lip stick lip balm
[[http://ultra-high-end.com/custom-made.html private label cosmetics, custom made cosmetic, custom made cream, custom lip stick lip balm]]
[[http://ultra-high-end.com/custom-made.html private label cosmetics, custom made cosmetic, custom made cream, custom lip stick lip balm]]
== private label cosmetics, custom made cosmetic, custom made cream, custom lip stick lip balm ==
Offers private label cosmetics with custom design. We produce lip balms, serum, creams and more. Easy to buy with eshop. Private label cosmetics, custom made cosmetic, custom made cream, custom lip stick lip balm
[[http://ultra-high-end.com/custom-made.html private label cosmetics, custom made cosmetic, custom made cream, custom lip stick lip balm]]
[[http://ultra-high-end.com/custom-made.html private label cosmetics, custom made cosmetic, custom made cream, custom lip stick lip balm]]

Latest revision as of 22:58, 25 August 2023

This material is obsolete ...

Please feel free to help us make an up-to-date version. (Discuss)

Set the hostname with a web interface

In this example we will use the hostname-model.lua and hostname-controller.lua from the previous example to set the hostname using the acf web interface.

For this example, we will assume you have root access on the linux box you are running on (preferably an alpine box!)

Use the existing code

We should have 'mvc.lua in the current directory, with the controller and model in helloworld/app The Controller and Model look the same as the end of the mvc.lua example, except we've taken out the on_load, pre_exec, post_exec, and on_unload methods.

helloworld/app/hostname-controller.lua

-- hostname controller code 

module ( ... , package.seeall )


create = function (self )      
        return self.model.update(self.clientdata.hostname)
end                                   
   
read = function (self)
        return self.model.read()
end                             

update =  create
   
delete = function (self )
        self.clientdata.hostname=""                      
        return self.worker:create()       
end


helloworld/app/hostname-model.lua

-- Model functions for retrieving / setting the hostname
module ( ..., package.seeall )

-- All functions return a table with
-- A value, the type of the value, and a message if there was an error

local hosttype={ type="string" }

update= function ( name )
        -- Check to make sure the name is valid 

        if (name == nil) then
                hosttype.msg = "Hostname cannot be nil"
        elseif (#name > 16) then
                hosttype.msg = "Hostname must be less than 16 chars"
        elseif (string.find(name, "[^%w%_%-]")) then
                hosttype.msg = "Hostname can contain alphanumerics only"
        end

        -- If it is, set the hostname
        if (hosttype.msg == nil ) then
                local f = io.open("/etc/hostname", "w")
                if f then
                        f:write(name .. "\n")
                        f:close()
                end
                f = io.popen ("/bin/hostname -F /etc/hostname")
                f:close()
                return read()
        -- Otherwise, return the error message
        else
                hosttype.value = name
                return hosttype
        end
end

read= function ()
        local f = io.popen ("/bin/hostname")
        local n = f:read("*a") or "none"
        f:close()
        n=string.gsub(n, "\n$", "")
        hosttype.value = n
        return (hosttype) 
end

Get and configure ACF

1. Grab a copy of all the acf code and support libraries from svn and copy into an /usr/share/acf directory

git clone https://gitlab.alpinelinux.org/acf/acf-core.git /usr/share/acf

2. Copy the acf.conf file to /etc/acf

# cp /usr/share/acf.conf /etc/acf/acf.conf

3. Start the web server

You'll need haserl, lua, and mini_httpd installed to run acf. If not already done, please install them.


Start mini_httpd (by hand for now)

# mini_httpd -d /usr/share/acf/www -c 'cgi-bin/**' start


4. Move your hostname model and controller

mkdir /usr/share/acf/app/sample
mv helloworld/app/hostname-* /usr/share/acf/app/sample/

5. Create a new view template, which is a "lua server page" Create the file as /usr/share/acf/app/sample/hostname-html.lsp

<? local form = ... ?>                                                                          
<h1>Hostname</h1>

<form action="update" method=post>                                                          
<p>The Hostname is now <input name=hostname value="<?= form.value ?>"</p>
                                                                                            
<p>input type=submit value=Submit></p>
</form>

6. Create a new roles file, which gives all users permission to access your actions. Create the file as /usr/share/acf/app/sample/hostname.roles

GUEST=hostname/read,hostname/update

Try the app

point your browser to your host/cgi-bin/acf/sample/hostname/read

You should now be able to update the hostname using the web interface, and your existing model and controller.