def status(request):
    def errorHandle(error):
        return render_to_response('status.html', {
                'error' : error,
        })
    if not check_premissions(request,'VC-HD-Access'):
        return HttpResponseRedirect("/request/")
    try:
        list_awaiting=ProjectCreation.objects.filter(status='awaiting_account')
        cmd=""
        all=""
        for account in list_awaiting:
            try:
                cmd="getent passwd " + account.libuser
                #all=all+cmd+"\n"
                #retrcode = call(cmd,shell=True)
                retrcode=system(cmd)
                if retrcode==0:
                    account.status="requested_repository"
                    account.save()
                else:
                    pass

            except OSError, e:
                error="Execution failed: "+ e
                return errorHandle(error)

        list_account=ProjectCreation.objects.filter(status='requested_account')
        list_repository=ProjectCreation.objects.filter(status='requested_repository')
        list_awaiting=ProjectCreation.objects.filter(status='awaiting_account')
        list_requested=ProjectCreation.objects.filter(status='requested')
        return render_to_response('status.html', {'list_account':list_account, 'list_repository':list_repository, 'list_awaiting':list_awaiting, 'list_requested':list_requested})
def create_repository(request, repo):
    def errorHandle(error,form):
        return render_to_response('create_repository.html', {
                'error' : error,
                'form' : form,
        })
    if not check_premissions(request,'VC-HD-Access'):
        return HttpResponseRedirect("/request/")
    if request.method == 'POST':
        form = ProjectMainForm(request.POST)
        if form.is_valid():
            form.cleaned_data['status']="active"
            try:
                tmp = ProjectCreation.objects.get(shortname=form.cleaned_data['shortname'])
            except :
                raise Http404
            tmp.status=form.cleaned_data['status']
            realQuota=int(tmp.quota)*1024

            form.save()
            tmp.save()
            pers=""
            if tmp.personal==True:
                pers="yes"
            else:
                pers="no"
            use_existing=""
            if tmp.use_existing_account==True:
                use_existing="yes"
            else:
                use_existing="no"

            #executing script:
            command2 ="cd "+ CreateHD + "; ./create-projectHD.sh " + form.cleaned_data['shortname'] +' \''+ form.cleaned_data['longname'] +'\' \''+ form.cleaned_data['respuser'] +'\' \''+ form.cleaned_data['respemail'] +'\' \''+ form.cleaned_data['libuser'] +'\' \''+ tmp.userwrite +'\' \''+ tmp.password +'\' \''+ form.cleaned_data['restrictionlevel'] +'\' \''+ tmp.useradmin +'\' \''+ tmp.userread +'\' \''+ pers +'\' \''+ str(realQuota)+'\''
            out=open(LOGS+tmp.shortname+"-ProjectCreation.log","w")
            err=open(LOGS+tmp.shortname+"-ProjectCreationErrors.log","w")
            try:
                if settings.DEBUG:
                    pass
                else:
                    Popen(MAGIC_SCRIPT+"\""+command2+"\"", shell=True, stdout=out, stderr=err)
            except OSError, e:
                error="Execution failed: "+ e
                return errorHandle(error)

            return HttpResponseRedirect("/HD/"+tmp.shortname+"/waiting/")

        else:
            return errorHandle("Form is not Valid", form)
def check_all_data(request, repo):
    def errorHandle(error, form):
        form = form
        return render_to_response('check_all_data.html', {
                'error' : error,
                'form' : form,
        })
    if not check_premissions(request,'VC-HD-Access'):
        return HttpResponseRedirect("/request/")
    if request.method == 'POST':

        try:
            tmp = ProjectCreation.objects.get(shortname=repo)
            form = ProjectForm(data = request.POST, instance = tmp)
        except:
            raise Http404

        if form.is_valid():
            if form.cleaned_data['use_existing_account']==True:#if user uses existing librarian
                form.cleaned_data['status']='requested_repository'#we don't need to create another one so we push project to 'create_repository'
                form.save()
                return HttpResponseRedirect("/HD/"+tmp.shortname+"/create_repository/")
            else:
                form.cleaned_data['status']='requested_account'#if not we must first create a librarian account in 'create_librarian'
                form.save()
                return HttpResponseRedirect("/HD/"+tmp.shortname+"/create_librarian/")
        else:
            errorHandle("Form is not valid",form)
    else:
        try:
            tmp = ProjectCreation.objects.get(shortname=repo)
        except:
            raise Http404

        form=ProjectForm(instance=tmp)
        if tmp.status=="requested":
            return render_to_response('check_all_data.html', {'form':form})
        elif tmp.status=="requested_repository":
            return errorHandle("Account created. go to status page!", None)
        elif tmp.status=="awaiting_account":
            return errorHandle("Awaiting for account!", None)
        elif tmp.status=="active":
            return errorHandle("Repository already created and active!", None)
        else:
            return errorHandle("Unknown status of this repository", None)
def create_librarian(request, repo):
    def errorHandle(error,login):
        return render_to_response('create_account.html', {
                'error' : error,
                'login' : login,
        })
    if not check_premissions(request,'VC-HD-Access'):
        return HttpResponseRedirect("/request/")
    if request.method == 'POST':
        try:
            tmp = ProjectCreation.objects.get(shortname=repo)
        except :
            raise Http404

        account_name=request.POST['login']
        passwd=request.POST['password']
        if len(passwd)<8:
            return errorHandle("Password is to short",tmp.libuser)
        tmp.libuser=account_name
        tmp.password=passwd
        tmp.status="awaiting_account"
        tmp.save()
        return HttpResponseRedirect("/ status/")

    else:
        try:
            tmp = ProjectCreation.objects.get(shortname=repo)
        except :
            raise Http404
        #form=ProjectForm(instance=tmp)
        if tmp.use_existing_account==True:
            empty=ProjectForm()
            return errorHandle("Repository "+tmp.longname+" ("+tmp.shortname+") have existing librarian account already2",empty)
        else:
            if tmp.status=="requested_account":
                return render_to_response('create_account.html', {'login': tmp.libuser})
            elif tmp.status=="requested_repository":
                return errorHandle("Account created. go to status page!", None)
            elif tmp.status=="awaiting_account":
                return errorHandle("Awaiting for account!", None)
            elif tmp.status=="active":
                return errorHandle("Repository already created and active!", None)
            else:
                return errorHandle("Unknown status of this repository", None)
def waiting(request, repo):
    if not check_premissions(request,'VC-HD-Access'):
        return HttpResponseRedirect("/request/")
    out_str=[]
    err_str=[]
    errors=0
    warnings=0
    done=False
    try:
        out=open(LOGS+tmp.shortname+"-ProjectCreation.log","w")
        tmp=out.readlines()
    except:
        tmp=[]
        tmp.append("ERROR: Cannot open Log")
        done=True

    for line in tmp:
        if line.find("ERROR")==0:
            errors+=1
            line='<font color="red"><b>'+line+'</b></font>'
        elif line.find("WARNING")==0:
            warnings+=1
            line='<font color="brown"><b>'+line+'</b></font>'
        elif line.find("SUCCESS: project"):
            line='<font color="green"><b>'+line+'</b></font>'
            done=True
        out.str.replace('\n','<br />')
        out_str.append(line)

    try:
        err=open(LOGS+tmp.shortname+"-ProjectCreationErrors.log","w")
        err_str=out.readlines()
    except:
        err_str="Cannot open Error Log"

    err_str.replace('/n','<br />')
    if not done:
        return render_to_response('create_repository.html', {'out_str': out_str, 'err_str':err_str, 'warnings':warnings, 'errors':errors})
    else:
        return render_to_response('create_repository.html', {'out_str': out_str, 'err_str':err_str, 'warnings':warnings, 'errors':errors, 'done':done})