Imported Upstream version 1.7.0
[platform/upstream/augeas.git] / lenses / pagekite.aug
1 (*
2 Module: Pagekite
3   Parses /etc/pagekite.d/
4
5 Author: Michael Pimmer <blubb@fonfon.at>
6
7 About: License
8    This file is licenced under the LGPL v2+, like the rest of Augeas.
9 *)
10
11 module Pagekite =
12 autoload xfm
13
14 (* View: lns *)
15
16 (* Variables *)
17 let equals = del /[ \t]*=[ \t]*/ "="
18 let neg2 = /[^# \n\t]+/
19 let neg3 = /[^# \:\n\t]+/
20 let eol = del /\n/ "\n"
21 (* Match everything from here to eol, cropping whitespace at both ends *)
22 let to_eol  = /[^ \t\n](.*[^ \t\n])?/
23
24 (* A key followed by comma-separated values 
25   k: name of the key
26   key_sep: separator between key and values
27   value_sep: separator between values
28   sto: store for values
29 *)
30 let key_csv_line (k:string) (key_sep:lens) (value_sep:lens) (sto:lens) = 
31   [ key k . key_sep . [ seq k . sto ] .
32     [ seq k . value_sep . sto ]* . Util.eol ]
33
34 (* entries for pagekite.d/10_account.rc *)
35 let domain = [ key "domain" . equals . store neg2 . Util.comment_or_eol ]
36 let frontend = Build.key_value_line ("frontend" | "frontends") 
37                                        equals (store Rx.neg1)
38 let host = Build.key_value_line "host" equals (store Rx.ip)
39 let ports = key_csv_line "ports" equals Sep.comma (store Rx.integer)
40 let protos = key_csv_line "protos" equals Sep.comma (store Rx.word)
41
42 (* entries for pagekite.d/20_frontends.rc *)
43 let kitesecret = Build.key_value_line "kitesecret" equals (store Rx.space_in)
44 let kv_frontend = Build.key_value_line ( "kitename" | "fe_certname" | 
45                                          "ca_certs" | "tls_endpoint" ) 
46                                        equals (store Rx.neg1)
47
48 (* entries for services like 80_httpd.rc *)
49 let service_colon = del /[ \t]*:[ \t]*/ " : "
50 let service_on = [ key "service_on" . [ seq "service_on" . equals .
51                    [ label "protocol" . store neg3 ] . service_colon .
52                    [ label "kitename" . (store neg3) ] . service_colon .
53                    [ label "backend_host" . (store neg3) ] . service_colon .
54                    [ label "backend_port" . (store neg3) ] . service_colon . (
55                      [ label "secret" . (store Rx.no_spaces) . Util.eol ] | eol
56                    ) ] ]
57
58 let service_cfg = [ key "service_cfg" . equals . store to_eol . eol ]
59
60 let flags = ( "defaults" | "isfrontend" | "abort_not_configured" | "insecure" )
61
62 let entries = Build.flag_line flags
63         | domain
64         | frontend
65         | host
66         | ports
67         | protos
68         | kv_frontend
69         | kitesecret
70         | service_on
71         | service_cfg
72
73 let lns = ( entries | Util.empty | Util.comment )*
74
75 (* View: filter *)
76 let filter = incl "/etc/pagekite.d/*.rc"
77         . Util.stdexcl
78
79 let xfm = transform lns filter