Пример #1
0
def setup_avatar_db(conn, adb):
    print("Creating the user avatar database")
    adb_url = '/' + adb
    conn.request("PUT", adb_url, headers=ph)
    resp = conn.getresponse()
    util.decode_response(resp)
    if resp.getcode() == 201:
        print("User Avatar database created.")
    elif resp.getcode() == 409 or resp.getcode() == 412:
        print("Avatar database already exists.")
    else:
        print("Error creating avatar database.")
    # Now save the auth document
    auth_url = adb_url + '/_design/_auth'
    conn.request("GET", auth_url, headers=gh)
    resp = conn.getresponse()
    addoc = util.load_json_file(
        os.path.join(wf_dir, 'scripts/ddoc/avatar_auth.json'))
    addoc_old = util.decode_response(resp)
    if resp.getcode() == 200:
        print("Avatar auth doc already exists.  Updating.")
        addoc['_rev'] = addoc_old['_rev']
    req_body = json.dumps(addoc)
    conn.request("PUT", auth_url, body=req_body, headers=ph)
    resp = conn.getresponse()
    util.decode_response(resp)
    if resp.getcode() == 200 or resp.getcode() == 201:
        print("Avatar auth doc saved successfully.")
    else:
        print("Avatar auth doc save failed.")
Пример #2
0
def setup_user_db(conn):
    # Now we'll set up the CouchDB user database
    print("\nSetting user database public fields in CouchDB")
    # First, set the user public fields in the CouchDB config
    url = '/_config/couch_httpd_auth/public_fields'
    field = "\"userPublic\""
    conn.request("PUT", url, body=field, headers=ph)
    resp = conn.getresponse()
    util.decode_response(resp)
    if resp.getcode() == 200 or resp.getcode() == 201:
        print("User config updated successfully")
    else:
        print("User config update failed!")
    # Now, set up some views in the user database
    url = '/_users/_design/user_queries'
    # Get the user design doc, if it exists
    conn.request("GET", url, headers=gh)
    resp = conn.getresponse()
    old_ddoc = util.decode_response(resp)
    user_ddoc = util.load_json_file(
        os.path.join(wf_dir, "scripts/ddoc/user_ddoc.json"))
    if resp.getcode() != 404:
        user_ddoc['_rev'] = old_ddoc['_rev']
    req_body = json.dumps(user_ddoc)
    conn.request("PUT", url, body=req_body, headers=ph)
    resp = conn.getresponse()
    util.decode_response(resp)
    if resp.getcode() == 200 or resp.getcode() == 201:
        print("User design doc saved successfully.")
    else:
        print("User design doc save failed.")
Пример #3
0
def create_master_user(conn, master):
    # Now, create a master user
    print("\nCreating a Master User")
    if master.user is None:
        print("At least one master user is required per Wikifeat installation.\n" "Let's create one now.")
        master.user = input("Enter Master username: "******"Enter Master user password: "******"Enter Master User's Last Name: ")
    if master.firstname is None:
        master.firstname = input("Enter Master User's First Name: ")
    user_data = dict()
    user_data["_id"] = "org.couchdb.user:"******"name"] = master.user
    user_data["type"] = "user"
    user_data["roles"] = list({"master", "admin", "all_users"})
    user_data["password"] = master.password
    user_data["userPublic"] = dict({"lastName": master.lastname, "firstName": master.firstname})

    url = "/_users/org.couchdb.user:%s" % master.user
    req_body = json.dumps(user_data)
    conn.request("PUT", url, body=req_body, headers=ph)
    resp = conn.getresponse()
    util.decode_response(resp)
    if resp.getcode() == 200 or resp.getcode() == 201:
        print("Master User created successfully.")
    elif resp.getcode() == 409 or resp.getcode() == 412:
        print("Master User already exists!")
    else:
        print("Creating master user failed.")
Пример #4
0
def setup_avatar_db(conn, adb):
    print("Creating the user avatar database")
    adb_url = "/" + adb
    conn.request("PUT", adb_url, headers=ph)
    resp = conn.getresponse()
    util.decode_response(resp)
    if resp.getcode() == 201:
        print("User Avatar database created.")
    elif resp.getcode() == 409 or resp.getcode() == 412:
        print("Avatar database already exists.")
    else:
        print("Error creating avatar database.")
    # Now save the auth document
    auth_url = adb_url + "/_design/_auth"
    conn.request("GET", auth_url, headers=gh)
    resp = conn.getresponse()
    addoc = util.load_json_file(os.path.join(wf_dir, "scripts/ddoc/avatar_auth.json"))
    addoc_old = util.decode_response(resp)
    if resp.getcode() == 200:
        print("Avatar auth doc already exists.  Updating.")
        addoc["_rev"] = addoc_old["_rev"]
    req_body = json.dumps(addoc)
    conn.request("PUT", auth_url, body=req_body, headers=ph)
    resp = conn.getresponse()
    util.decode_response(resp)
    if resp.getcode() == 200 or resp.getcode() == 201:
        print("Avatar auth doc saved successfully.")
    else:
        print("Avatar auth doc save failed.")
Пример #5
0
def setup_user_db(conn):
    # Now we'll set up the CouchDB user database
    print("\nSetting user database public fields in CouchDB")
    # First, set the user public fields in the CouchDB config
    url = "/_config/couch_httpd_auth/public_fields"
    field = '"userPublic"'
    conn.request("PUT", url, body=field, headers=ph)
    resp = conn.getresponse()
    util.decode_response(resp)
    if resp.getcode() == 200 or resp.getcode() == 201:
        print("User config updated successfully")
    else:
        print("User config update failed!")
    # Now, set up some views in the user database
    url = "/_users/_design/user_queries"
    # Get the user design doc, if it exists
    conn.request("GET", url, headers=gh)
    resp = conn.getresponse()
    old_ddoc = util.decode_response(resp)
    user_ddoc = util.load_json_file(os.path.join(wf_dir, "scripts/ddoc/user_ddoc.json"))
    if resp.getcode() != 404:
        user_ddoc["_rev"] = old_ddoc["_rev"]
    req_body = json.dumps(user_ddoc)
    conn.request("PUT", url, body=req_body, headers=ph)
    resp = conn.getresponse()
    util.decode_response(resp)
    if resp.getcode() == 200 or resp.getcode() == 201:
        print("User design doc saved successfully.")
    else:
        print("User design doc save failed.")
Пример #6
0
def create_master_user(conn, master):
    # Now, create a master user
    print("\nCreating a Master User")
    if master.user is None:
        print(
            "At least one master user is required per Wikifeat installation.\n"
            "Let's create one now.")
        master.user = input("Enter Master username: "******"Enter Master user password: "******"Enter Master User's Last Name: ")
    if master.firstname is None:
        master.firstname = input("Enter Master User's First Name: ")
    user_data = dict()
    user_data['_id'] = "org.couchdb.user:"******"user"
    user_data['roles'] = list({"master", "admin", "all_users"})
    user_data['password'] = master.password
    user_data['userPublic'] = dict({
        "lastName": master.lastname,
        "firstName": master.firstname
    })

    url = '/_users/org.couchdb.user:%s' % master.user
    req_body = json.dumps(user_data)
    conn.request("PUT", url, body=req_body, headers=ph)
    resp = conn.getresponse()
    util.decode_response(resp)
    if resp.getcode() == 200 or resp.getcode() == 201:
        print("Master User created successfully.")
    elif resp.getcode() == 409 or resp.getcode() == 412:
        print("Master User already exists!")
    else:
        print("Creating master user failed.")
Пример #7
0
def setup_main_db(conn, main_db):

    write_role = main_db + ":write"
    # This here is the validation function to control writing to the main database
    validation_func = """
    function(newDoc, oldDoc, userCtx){
        if((userCtx.roles.indexOf("%s") === -1) &&
            (userCtx.roles.indexOf("admin") === -1) &&
            (userCtx.roles.indexOf("master") === -1) &&
            (userCtx.roles.indexOf("_admin") === -1)){
                throw({forbidden: "Not authorized"}); }
    }
    """ % write_role

    auth_doc = dict()
    auth_doc["_id"] = "_design/_auth"
    auth_doc["validate_doc_update"] = validation_func

    # Create the main database
    print("Creating the main Wikifeat database")
    main_db_url = '/' + main_db
    conn.request("PUT", main_db_url, headers=ph)
    resp = conn.getresponse()
    util.decode_response(resp)
    if resp.getcode() == 201:
        print("Main database created.")
    elif resp.getcode() == 409 or resp.getcode() == 412:
        print("Main database already exists.")
    else:
        print("Error occurred.")
        sys.exit(-1)
    # Save the auth document
    auth_url = main_db_url + '/_design/_auth'
    conn.request("GET", auth_url, headers=gh)
    resp = conn.getresponse()
    addoc = util.decode_response(resp)
    req_body = ""
    if resp.getcode() == 404:
        req_body = json.dumps(auth_doc)
    elif resp.getcode() == 200:
        addoc['validate_doc_update'] = validation_func
        req_body = json.dumps(addoc)
    if len(req_body) > 1:
        conn.request("PUT", auth_url, body=req_body, headers=ph)
        resp = conn.getresponse()
        util.decode_response(resp)
        if resp.getcode() == 201:
            print("Main auth doc successfully updated.")
        else:
            print("Main auth doc update failed.")
    # Now load the main db security document
    sec_url = main_db_url + '/_security'
    main_sec = util.load_json_file(
        os.path.join(wf_dir, "scripts/ddoc/main_access.json"))
    req_body = json.dumps(main_sec)
    conn.request("PUT", sec_url, body=req_body, headers=ph)
    resp = conn.getresponse()
    util.decode_response(resp)
    if resp.getcode() == 200 or resp.getcode() == 201:
        print("Main security doc saved successfully.")
    else:
        print("Main security doc save failed.")
    # Now save the main db design doc
    main_ddoc_url = main_db_url + '/_design/wiki_query'
    conn.request("GET", main_ddoc_url, headers=gh)
    resp = conn.getresponse()
    existing_ddoc = util.decode_response(resp)
    main_ddoc = util.load_json_file(
        os.path.join(wf_dir, "scripts/ddoc/main_ddoc.json"))
    if resp.getcode() == 200:
        # Set the rev so we can update
        print("Main design doc exists.  Updating.")
        main_ddoc['_rev'] = existing_ddoc['_rev']
    req_body = json.dumps(main_ddoc)
    conn.request("PUT", main_ddoc_url, body=req_body, headers=ph)
    resp = conn.getresponse()
    util.decode_response(resp)
    if resp.getcode() == 200 or resp.getcode() == 201:
        print("Main design doc saved successfully")
    else:
        print("Main design doc save failed")
Пример #8
0
def setup_main_db(conn, main_db):

    write_role = main_db + ":write"
    # This here is the validation function to control writing to the main database
    validation_func = (
        """
    function(newDoc, oldDoc, userCtx){
        if((userCtx.roles.indexOf("%s") === -1) &&
            (userCtx.roles.indexOf("admin") === -1) &&
            (userCtx.roles.indexOf("master") === -1) &&
            (userCtx.roles.indexOf("_admin") === -1)){
                throw({forbidden: "Not authorized"}); }
    }
    """
        % write_role
    )

    auth_doc = dict()
    auth_doc["_id"] = "_design/_auth"
    auth_doc["validate_doc_update"] = validation_func

    # Create the main database
    print("Creating the main Wikifeat database")
    main_db_url = "/" + main_db
    conn.request("PUT", main_db_url, headers=ph)
    resp = conn.getresponse()
    util.decode_response(resp)
    if resp.getcode() == 201:
        print("Main database created.")
    elif resp.getcode() == 409 or resp.getcode() == 412:
        print("Main database already exists.")
    else:
        print("Error occurred.")
        sys.exit(-1)
    # Save the auth document
    auth_url = main_db_url + "/_design/_auth"
    conn.request("GET", auth_url, headers=gh)
    resp = conn.getresponse()
    addoc = util.decode_response(resp)
    req_body = ""
    if resp.getcode() == 404:
        req_body = json.dumps(auth_doc)
    elif resp.getcode() == 200:
        addoc["validate_doc_update"] = validation_func
        req_body = json.dumps(addoc)
    if len(req_body) > 1:
        conn.request("PUT", auth_url, body=req_body, headers=ph)
        resp = conn.getresponse()
        util.decode_response(resp)
        if resp.getcode() == 201:
            print("Main auth doc successfully updated.")
        else:
            print("Main auth doc update failed.")
    # Now load the main db security document
    sec_url = main_db_url + "/_security"
    main_sec = util.load_json_file(os.path.join(wf_dir, "scripts/ddoc/main_access.json"))
    req_body = json.dumps(main_sec)
    conn.request("PUT", sec_url, body=req_body, headers=ph)
    resp = conn.getresponse()
    util.decode_response(resp)
    if resp.getcode() == 200 or resp.getcode() == 201:
        print("Main security doc saved successfully.")
    else:
        print("Main security doc save failed.")
    # Now save the main db design doc
    main_ddoc_url = main_db_url + "/_design/wiki_query"
    conn.request("GET", main_ddoc_url, headers=gh)
    resp = conn.getresponse()
    existing_ddoc = util.decode_response(resp)
    main_ddoc = util.load_json_file(os.path.join(wf_dir, "scripts/ddoc/main_ddoc.json"))
    if resp.getcode() == 200:
        # Set the rev so we can update
        print("Main design doc exists.  Updating.")
        main_ddoc["_rev"] = existing_ddoc["_rev"]
    req_body = json.dumps(main_ddoc)
    conn.request("PUT", main_ddoc_url, body=req_body, headers=ph)
    resp = conn.getresponse()
    util.decode_response(resp)
    if resp.getcode() == 200 or resp.getcode() == 201:
        print("Main design doc saved successfully")
    else:
        print("Main design doc save failed")