Welcome    Usage    Browse    Find CID    Search     Log in

cM API Documentation

module.py

Go to the documentation of this file.
00001 #
00002 # Collective Mind
00003 #
00004 # See cM LICENSE.txt for licensing details.
00005 # See cM Copyright.txt for copyright details.
00006 #
00007 # Developer(s): (C) Grigori Fursin, started on 2011.09
00008 #
00009 
00010 # Should always be here
00011 ini={}
00012 cm_kernel=None
00013 
00014 # Local settings
00015 import string
00016 import os
00017 import hashlib
00018 import base64
00019 import getpass
00020 
00021 # ============================================================================
00022 def init(i):
00023     return {'cm_return':0}
00024 
00025 # ============================================================================
00026 def add_data(i):
00027 
00028     """
00029     Add user (and public person profile)
00030 
00031     Input:  {
00032               cm_username             - username (UOA)
00033               cm_user_password        - user password
00034               cm_user_password_repeat - repeat user password for checking
00035               name                    - user real name (will be used as alias)
00036 
00037               (cm_array)              - Note, that if cm_array is present, 
00038                                         all above parameters should be inside it
00039 
00040               (cm_repo_uoa)           - repo UOA where to create user entry
00041             }
00042 
00043     Output: {
00044               cm_return  - return code >0 if error
00045               cm_path    - path to created data entry
00046               ...        - other paramaters from core add_data function
00047             }
00048     """
00049 
00050     # Check if default repo to create user
00051     if i.get('cm_repo_uoa','')=='':
00052        if cm_kernel.ini['dcfg'].get('cm_default_repo_for_user', '')!='':
00053           i['cm_repo_uoa']=cm_kernel.ini['dcfg'].get('cm_default_repo_for_user')
00054 
00055     # If web access, move to 'core' module
00056     if i.get('cm_console','')=='web':
00057        #Set owner
00058        if i.get('#form4##cm_access_control#read_groups','')=='':  i['#form4##cm_access_control#read_groups']='owner'
00059        if i.get('#form4##cm_access_control#write_groups','')=='': i['#form4##cm_access_control#write_groups']='owner'
00060 
00061        i['cm_run_module_uoa']=ini['cfg']['cm_modules']['cm-core']
00062        i['cm_action']='add'
00063        return cm_kernel.access(i)
00064 
00065     # Check if cm_array or CMD
00066     if 'cm_array' in i: ir=i['cm_array'] 
00067     else: ir=i
00068 
00069     # Second, process request
00070     # Get unique username to make UOA
00071     username=''
00072     if ir.get('cm_username', '')=='':
00073        ir['cm_username']=raw_input('Enter unique username: ')
00074     if ir.get('cm_username', '')=='':
00075        return {'cm_return':1, 'cm_error':'unique username is not set'}
00076     username=ir['cm_username']
00077     del(ir['cm_username'])
00078     username=username.strip()
00079 
00080     # Get passwords
00081     pass1=ir.get('cm_user_password', '')
00082     if pass1=='': 
00083        pass1=getpass.getpass('Enter password: ')
00084        ir['cm_user_password']=pass1
00085     if pass1=='': 
00086        return {'cm_return':1, 'cm_error':'password is not set'}
00087     del(ir['cm_user_password'])
00088     pass1=pass1.strip()
00089 
00090     pass2=ir.get('cm_user_password_repeat', '')
00091     if pass2=='': 
00092        pass2=getpass.getpass('Repeat password: ')
00093        ir['cm_user_password_repeat']=pass2
00094     if pass2=='': return {'cm_return':1, 'cm_error':'second password is not set'}
00095     del(ir['cm_user_password_repeat'])
00096     pass2=pass2.strip()
00097     if pass1!=pass2:
00098        return {'cm_return':1, 'cm_error':'passwords do not match'}
00099 
00100     # First hash (compatible with htpasswd)
00101     rs=cm_kernel.convert_str_to_sha1({'cm_string':pass1})
00102     if rs['cm_return']>0: return rs
00103     hash1=rs['cm_string_sha1_base64']
00104 
00105     # Second hash (compatible with htpasswd)
00106     rs=cm_kernel.convert_str_to_sha1({'cm_string':hash1})
00107     if rs['cm_return']>0: return rs
00108     hash2=rs['cm_string_sha1_base64']
00109 
00110     ir['cm_user_password2']=hash2
00111 
00112     # Go to common core function to create entry (user) - private profile
00113     if cm_kernel.ini.get('web','')=='yes' and i.get('cm_console','')!='json': cm_kernel.print_for_con('<H2>Private profile created!</H2>')
00114 
00115     ii={};ii.update(i)
00116     ii['cm_admin']='yes'
00117     ii['cm_run_module_uoa']=ini['cfg']['cm_modules']['cm-core']
00118     ii['cm_module_uoa']=ini['cm_module_uid']
00119     ii['cm_data_uoa']=username
00120     ii['cm_console']=''
00121     if cm_kernel.ini.get('cm_console','')!='web': ii['cm_console']=i.get('cm_console','')
00122     if cm_kernel.ini.get('web','')=='yes' and i.get('cm_console','')!='json': ii['cm_report_in_html']='yes'
00123 
00124     ii['cm_access_control']=ini['cfg']["cm_default_private_access_control"]
00125 
00126     if 'name' in ir: ir['cm_display_as_alias']=ir['name']
00127     ii['cm_array']=ir
00128 
00129     ru=cm_kernel.access(ii)
00130     if ru['cm_return']>0: return ru
00131 
00132     # Save to local htpasswd
00133     p=ru['cm_path']
00134     f=file(os.path.join(p, '.htpasswd'), 'w')
00135     f.write(username+':{SHA}'+hash1+'\n')
00136     f.close()
00137 
00138     # Go to common core function to create entry (person) - public profile
00139     if cm_kernel.ini.get('web')=='yes' and i.get('cm_console','')!='json': 
00140        cm_kernel.print_for_con('<HR class="cm-hr">')
00141        cm_kernel.print_for_con('<H2>Public profile created!</H2>')
00142 
00143     ii={};ii.update(i)
00144 
00145     ii['cm_admin']='yes'
00146     ii['cm_run_module_uoa']=ini['cfg']['cm_modules']['cm-core']
00147     ii['cm_module_uoa']=ini['cfg']['cm_modules']['cm-person']
00148     ii['cm_data_uoa']=username
00149     ii['cm_data_uid']=ru['cm_uid']
00150     ii['cm_console']=''
00151     if cm_kernel.ini.get('cm_console','')!='web': ii['cm_console']=i.get('cm_console','')
00152     if cm_kernel.ini.get('web','')=='yes' and i.get('cm_console','')!='json': ii['cm_report_in_html']='yes'
00153 
00154     if 'cm_user_password2' in ir: del(ir['cm_user_password2'])
00155     if 'cm_user_groups' in ir: del(ir['cm_user_groups'])
00156     if 'cm_default_web_uoa' in ir: del(ir['cm_default_web_uoa'])
00157 
00158     ii['cm_access_control']=ini['cfg']["cm_default_public_access_control"]
00159 
00160     ii['cm_array']=ir
00161 
00162     r=cm_kernel.access(ii)
00163     if r['cm_return']>0: return r
00164 
00165     # We need it here since this function overloads original 'core' add_data function
00166     ru['cm_skip_report']='yes'
00167 
00168     return ru
00169 
00170 # ============================================================================
00171 def update_data(i):
00172 
00173     """
00174     Input:  {
00175             }
00176 
00177     Output: {
00178             }
00179     """
00180 
00181     # If web access, move to 'core' module
00182     if i.get('cm_console','')=='web':
00183        i['cm_run_module_uoa']=ini['cfg']['cm_modules']['cm-core']
00184        i['cm_action']='update'
00185        return cm_kernel.access(i)
00186 
00187     # Check if cm_array or CMD
00188     if 'cm_array' in i: ir=i['cm_array'] 
00189     else: ir=i
00190 
00191     # Load data to get path
00192     ii={}
00193     ii['cm_run_module_uoa']=ini['cfg']['cm_modules']['cm-core']
00194     ii['cm_action']='load'
00195     if 'cm_module_uoa' in i: ii['cm_module_uoa']=i['cm_module_uoa']
00196     if 'cm_data_uoa' in i: ii['cm_data_uoa']=i['cm_data_uoa']
00197     if i.get('cm_repo_uoa','')=='':
00198        if cm_kernel.ini['dcfg'].get('cm_default_repo_for_add','')!='':
00199           ii['cm_repo_uoa']=cm_kernel.ini['dcfg']['cm_default_repo_for_add']
00200     else:
00201        ii['cm_repo_uoa']=i['cm_repo_uoa']
00202     rx=cm_kernel.access(ii)
00203     if rx['cm_return']>0: return rx
00204 
00205     # Get passwords
00206     pass1=ir.get('cm_user_password', '')
00207     if 'cm_user_password' in ir: del(ir['cm_user_password'])
00208     pass2=ir.get('cm_user_password_repeat', '')
00209     if 'cm_user_password_repeat' in ir: del(ir['cm_user_password_repeat'])
00210  
00211     if pass1!=pass2:
00212        return {'cm_return':1, 'cm_error':'passwords do not match'}
00213 
00214     if pass1=='':
00215        # Do not update password
00216        if 'cm_user_password2' in ir: del(ir['cm_user_password2'])
00217     else:
00218        # First hash (compatible with htpasswd)
00219        rs=cm_kernel.convert_str_to_sha1({'cm_string':pass1})
00220        if rs['cm_return']>0: return rs
00221        hash1=rs['cm_string_sha1_base64']
00222 
00223        # Second hash (compatible with htpasswd)
00224        rs=cm_kernel.convert_str_to_sha1({'cm_string':hash1})
00225        if rs['cm_return']>0: return rs
00226        hash2=rs['cm_string_sha1_base64']
00227 
00228        ir['cm_user_password2']=hash2
00229 
00230        # Save to local htpasswd
00231        p=rx['cm_path']
00232        f=file(os.path.join(p, '.htpasswd'), 'w')
00233        f.write(rx['cm_uoa']+':{SHA}'+hash1+'\n')
00234        f.close()
00235 
00236     ii={};ii.update(i)
00237     ii['cm_run_module_uoa']=ini['cfg']['cm_modules']['cm-core']
00238     ii['cm_console']=''
00239     if cm_kernel.ini.get('cm_console','')!='web': ii['cm_console']=i.get('cm_console','')
00240     if cm_kernel.ini.get('web','')=='yes': ii['cm_report_in_html']='yes'
00241 
00242     if 'name' in ir: ir['cm_display_as_alias']=ir['name']
00243 
00244     ii['cm_array']=ir
00245 
00246     ru=cm_kernel.access(ii)
00247     if ru['cm_return']>0: return ru
00248 
00249     # Check if public profile exists and if not, create it
00250     ii['cm_run_module_uoa']=ini['cfg']['cm_modules']['cm-core']
00251     ii['cm_action']='load'
00252     ii['cm_module_uoa']=ini['cfg']['cm_modules']['cm-person']
00253     ii['cm_data_uoa']=ru['cm_uoa']
00254     ii['cm_data_uid']=ru['cm_uid']
00255     r=cm_kernel.access(ii)
00256     if r['cm_return']>0: 
00257        # Check if default repo to create user
00258        if cm_kernel.ini['dcfg'].get('cm_default_repo_for_user', '')!='':
00259           i['cm_repo_uoa']=cm_kernel.ini['dcfg'].get('cm_default_repo_for_user')
00260 
00261        # Go to common core function to create entry (person) - public profile
00262        if cm_kernel.ini.get('web')=='yes' and i.get('cm_console','')!='json': 
00263           cm_kernel.print_for_con('<HR class="cm-hr">')
00264           cm_kernel.print_for_con('<H2>Adding public profile:</H2>')
00265 
00266        ii={};ii.update(i)
00267 
00268        ii['cm_run_module_uoa']=ini['cfg']['cm_modules']['cm-core']
00269        ii['cm_module_uoa']=ini['cfg']['cm_modules']['cm-person']
00270        ii['cm_data_uoa']=ru['cm_uoa']
00271        ii['cm_data_uid']=ru['cm_uid']
00272        ii['cm_console']=''
00273        if cm_kernel.ini.get('cm_console','')!='web': ii['cm_console']=i.get('cm_console','')
00274        if cm_kernel.ini.get('web','')=='yes': ii['cm_report_in_html']='yes'
00275 
00276        if 'cm_user_password2' in ir: del(ir['cm_user_password2'])
00277        if 'cm_user_groups' in ir: del(ir['cm_user_groups'])
00278        if 'cm_default_web_uoa' in ir: del(ir['cm_default_web_uoa'])
00279 
00280        ii['cm_access_control']=ini['cfg']["cm_default_public_access_control"]
00281 
00282        ii['cm_array']=ir
00283 
00284        r=cm_kernel.access(ii)
00285        if r['cm_return']>0: return r
00286 
00287     # We need it here since this function overloads original 'core' update_data function
00288     ru['cm_skip_report']='yes'
00289 
00290     return ru

Generated on Wed May 28 02:49:02 2014 for Collective Mind Framework by DoxyGen 1.6.1
Concept, design and coordination: Grigori Fursin (C) 1993-2013