source: trunk/grails-app/services/api/ApiService.groovy @ 2188

Last change on this file since 2188 was 2188, checked in by work@…, 9 years ago
  • added / improved api documentation
  • added getAssaysForStudy api method
  • simplified and centralized simplication method for flattening domain data
File size: 2.2 KB
Line 
1/**
2 * ApiService Service
3 *
4 * Description of my service
5 *
6 * @author  your email (+name?)
7 * @since       2010mmdd
8 * @package     ???
9 *
10 * Revision information:
11 * $Rev: 1430 $
12 * $Author: work@osx.eu $
13 * $Date: 2011-01-21 21:05:36 +0100 (Fri, 21 Jan 2011) $
14 */
15package api
16
17import java.security.MessageDigest
18
19class ApiService {
20    // the shared secret used to validate api calls
21    static final String API_SECRET = "th!s_sH0uld^Pr0bab7y_m0v3_t%_th3_uSeR_d0Ma!n_ins7ead!"
22    static transactional = true
23
24    /**
25     * validate a client request by checking the validation checksum
26     * @param deviceID
27     * @param validation
28     * @return
29     */
30    def validateRequest(String deviceID, String validation) {
31        return true
32
33        // get token for this device ID
34        Token token = Token.findByDeviceID(deviceID)
35
36        // increase sequence
37        if (token) {
38            token.sequence = token.sequence+1
39            token.save()
40
41            // generate the validation checksum
42            MessageDigest digest = MessageDigest.getInstance("MD5")
43            String validationSum = new BigInteger(1,digest.digest("${token.deviceToken}${token.sequence}${API_SECRET}".getBytes())).toString(16).padLeft(32,"0")
44
45            // check if the validation confirms
46            return (validation == validationSum)
47        } else {
48            // no such token, re-authenticate
49            return false
50        }
51    }
52   
53    def flattenDomainData(elements) {
54        def items = []
55
56        // iterate through elements
57        elements.each {
58            def fields  = it.giveFields()
59            def item    = [:]
60
61            // add token
62            if (it.respondsTo('getToken')) {
63                item['token'] = it.getToken()
64            } else {
65                item['id'] = it.id
66            }
67
68            // add subject field values
69            fields.each { field ->
70                def value = it.getFieldValue( field.name )
71
72                if (value.hasProperty('name')) {
73                    item[ field.name ] = value.name
74                } else {
75                    item[ field.name ] = value
76                }
77            }
78
79            items[ items.size() ] = item
80        }
81
82        return items
83    }
84}
Note: See TracBrowser for help on using the repository browser.