source: trunk/grails-app/controllers/dbnp/studycapturing/TemplateEditorController.groovy @ 374

Last change on this file since 374 was 374, checked in by duh, 9 years ago
  • added crypto plugin
  • implemented blowfish encryption in Wizard Tag Library
  • implemented blowfish descryption in TemplateEditorController?
  • added shared secret configuration to Config.groovy
  • Property svn:keywords set to Date Author Rev
File size: 2.5 KB
Line 
1/**
2 * TemplateEditorController Controler
3 *
4 * Webflow driven template editor
5 *
6 * @author  Jeroen Wesbeek
7 * @since       20100415
8 * @package     studycapturing
9 *
10 * Revision information:
11 * $Rev: 374 $
12 * $Author: duh $
13 * $Date: 2010-04-23 09:02:31 +0000 (vr, 23 apr 2010) $
14 */
15package dbnp.studycapturing
16import dbnp.data.*
17import dbnp.studycapturing.*
18import cr.co.arquetipos.crypto.Blowfish
19
20class TemplateEditorController {
21        /**
22         * index closure
23         */
24    def index = {
25                // got a entity get parameter?
26                def entity = null
27                if (params.entity) {
28                        // decode entity get parameter
29                        if (grailsApplication.config.crypto) {
30                                // generate a Blowfish encrypted and Base64 encoded string.
31                                entity = Blowfish.decryptBase64(
32                                        params.entity,
33                                        grailsApplication.config.crypto.shared.secret
34                                )
35                        } else {
36                                // base64 only; this is INSECURE! Even though it is not
37                                // very likely, it is possible to exploit this and have
38                                // Grails dynamically instantiate whatever class you like.
39                                // If that constructor does something harmfull this could
40                                // be dangerous. Hence, use encryption (above) instead...
41                                entity = new String(params.entity.toString().decodeBase64())
42                        }
43                }
44
45                // got with the flow!
46        redirect(action: 'pages', params:["entity":entity])
47    }
48
49        /**
50         * Webflow
51         */
52        def pagesFlow = {
53                // start the flow
54                start {
55                        action {
56                                // define initial flow variables
57                                flow.entity = null
58                                flow.templates = []
59
60                                // define success variable
61                                def errors = true
62
63                                // got an entity parameter?
64                                if (params.entity && params.entity instanceof String) {
65                                        // yes, try to dynamicall load the entity
66                                        try {
67                                                // dynamically load the entity
68                                                def entity = Class.forName(params.entity, true, this.getClass().getClassLoader())
69
70                                                // succes, is entity an instance of TemplateEntity?
71                                                if (entity.superclass =~ /TemplateEntity$/) {
72                                                        errors = false
73
74                                                        // yes, assign entity to the flow
75                                                        flow.entity = entity
76
77                                                        // fetch all templates to this entity
78                                                        flow.templates = Template.findAllByEntity(entity)
79                                                }
80                                        } catch (Exception e) { }
81                                }
82
83                                // success?
84                                if (errors) {
85                                        error()
86                                } else {
87                                        success()
88                                }
89                        }
90                        on("success").to "templates"
91                        on("error").to "errorInvalidEntity"
92                }
93
94                // error dynamically loading entity
95                errorInvalidEntity {
96                        render(view: "_errorInvalidEntity")
97                }
98
99                // main template editor page
100                templates {
101                        render(view: "/templateEditor/templates")
102                        onRender {
103                                println "render templates"
104                        }
105                        on("next").to "start"
106                }
107        }
108}
Note: See TracBrowser for help on using the repository browser.