static int start (CcnetProcessor *processor, int argc, char **argv) { char *session_token; USE_PRIV; if (argc != 1) { ccnet_processor_send_response (processor, SC_BAD_ARGS, SS_BAD_ARGS, NULL, 0); ccnet_processor_done (processor, FALSE); return -1; } session_token = argv[0]; if (seaf_token_manager_verify_token (seaf->token_mgr, NULL, processor->peer_id, session_token, priv->repo_id) == 0) { ccnet_processor_thread_create (processor, seaf->job_mgr, get_repo_info_thread, get_repo_info_done, processor); return 0; } else { ccnet_processor_send_response (processor, SC_ACCESS_DENIED, SS_ACCESS_DENIED, NULL, 0); ccnet_processor_done (processor, FALSE); return -1; } }
static int recv_commit_start (CcnetProcessor *processor, int argc, char **argv) { USE_PRIV; char *session_token; if (argc != 2) { ccnet_processor_send_response (processor, SC_BAD_ARGS, SS_BAD_ARGS, NULL, 0); ccnet_processor_done (processor, FALSE); return -1; } session_token = argv[1]; if (seaf_token_manager_verify_token (seaf->token_mgr, processor->peer_id, session_token, NULL) == 0) { ccnet_processor_send_response (processor, SC_OK, SS_OK, NULL, 0); processor->state = RECV_OBJECT; priv->writer_id = seaf_obj_store_register_async_write (seaf->commit_mgr->obj_store, write_done_cb, processor); priv->registered = TRUE; return 0; } else { ccnet_processor_send_response (processor, SC_ACCESS_DENIED, SS_ACCESS_DENIED, NULL, 0); ccnet_processor_done (processor, FALSE); return -1; } }
static int start (CcnetProcessor *processor, int argc, char **argv) { char *session_token; USE_PRIV; if (argc != 1) { ccnet_processor_send_response (processor, SC_BAD_ARGS, SS_BAD_ARGS, NULL, 0); ccnet_processor_done (processor, FALSE); return -1; } session_token = argv[0]; if (seaf_token_manager_verify_token (seaf->token_mgr, processor->peer_id, session_token, NULL) == 0) { ccnet_processor_send_response (processor, SC_OK, SS_OK, NULL, 0); processor->state = RECV_ROOT; priv->dir_queue = g_queue_new (); register_async_io (processor); return 0; } else { ccnet_processor_send_response (processor, SC_ACCESS_DENIED, SS_ACCESS_DENIED, NULL, 0); ccnet_processor_done (processor, FALSE); return -1; } }
static int put_commit_start (CcnetProcessor *processor, int argc, char **argv) { char *commit_id; char *session_token; USE_PRIV; if (argc != 2) { ccnet_processor_send_response (processor, SC_BAD_ARGS, SS_BAD_ARGS, NULL, 0); ccnet_processor_done (processor, FALSE); return -1; } session_token = argv[1]; if (seaf_token_manager_verify_token (seaf->token_mgr, processor->peer_id, session_token, NULL) < 0) { ccnet_processor_send_response (processor, SC_ACCESS_DENIED, SS_ACCESS_DENIED, NULL, 0); ccnet_processor_done (processor, FALSE); return -1; } commit_id = argv[0]; memcpy (priv->commit_id, commit_id, 41); ccnet_processor_send_response (processor, SC_OK, SS_OK, NULL, 0); return send_commit_ids (processor, commit_id); }
static int put_commit_start (CcnetProcessor *processor, int argc, char **argv) { char *head_id, *remote_id = NULL; char *session_token; USE_PRIV; if (argc < 2) { ccnet_processor_send_response (processor, SC_BAD_ARGS, SS_BAD_ARGS, NULL, 0); ccnet_processor_done (processor, FALSE); return -1; } if (argc == 2) { head_id = argv[0]; session_token = argv[1]; } else if (argc >= 3) { head_id = argv[0]; remote_id = argv[1]; session_token = argv[2]; } if (strlen(head_id) != 40 || (remote_id && strlen(remote_id) != 40)) { ccnet_processor_send_response (processor, SC_BAD_ARGS, SS_BAD_ARGS, NULL, 0); ccnet_processor_done (processor, FALSE); return -1; } if (seaf_token_manager_verify_token (seaf->token_mgr, processor->peer_id, session_token, NULL) < 0) { ccnet_processor_send_response (processor, SC_ACCESS_DENIED, SS_ACCESS_DENIED, NULL, 0); ccnet_processor_done (processor, FALSE); return -1; } memcpy (priv->head_commit_id, head_id, 41); if (remote_id != NULL) memcpy (priv->remote_commit_id, remote_id, 41); ccnet_processor_send_response (processor, SC_OK, SS_OK, NULL, 0); priv->reader_id = seaf_obj_store_register_async_read (seaf->commit_mgr->obj_store, read_done_cb, processor); priv->registered = TRUE; ccnet_processor_thread_create (processor, seaf->job_mgr, collect_commit_id_thread, collect_commit_id_done, processor); return 0; }
static int handle_auth_req_content_cb (char *content, int clen, void *cbarg) { BlockTxServer *server = cbarg; char *session_token = content; SearpcClient *client = NULL; char repo_id[37]; SeafRepo *repo; if (session_token[clen - 1] != '\0') { seaf_warning ("Invalid session token format.\n"); send_auth_response (server, STATUS_BAD_REQUEST); return -1; } client = ccnet_create_pooled_rpc_client (seaf->client_pool, NULL, "ccnet-rpcserver"); if (!client) { seaf_warning ("Failed to create rpc client.\n"); send_auth_response (server, STATUS_INTERNAL_SERVER_ERROR); return -1; } if (seaf_token_manager_verify_token (seaf->token_mgr, client, NULL, session_token, repo_id) < 0) { seaf_warning ("Session token check failed.\n"); send_auth_response (server, STATUS_ACCESS_DENIED); ccnet_rpc_client_free (client); return -1; } ccnet_rpc_client_free (client); repo = seaf_repo_manager_get_repo (seaf->repo_mgr, repo_id); if (!repo) { seaf_warning ("Failed to get repo %.8s.\n", repo_id); return -1; } memcpy (server->store_id, repo->store_id, 36); server->repo_version = repo->version; seaf_repo_unref (repo); if (send_auth_response (server, STATUS_OK) < 0) return -1; seaf_debug ("recv_state set to HEADER.\n"); server->parser.content_cb = handle_block_header_content_cb; server->recv_state = RECV_STATE_HEADER; return 0; }
static int start (CcnetProcessor *processor, int argc, char **argv) { USE_PRIV; char *session_token; if (argc != 4) { ccnet_processor_send_response (processor, SC_BAD_ARGS, SS_BAD_ARGS, NULL, 0); ccnet_processor_done (processor, FALSE); return -1; } if (!is_uuid_valid(argv[0]) || strlen(argv[2]) != 40) { ccnet_processor_send_response (processor, SC_BAD_ARGS, SS_BAD_ARGS, NULL, 0); ccnet_processor_done (processor, FALSE); return -1; } memcpy (priv->repo_id, argv[0], 36); memcpy (priv->new_head, argv[2], 40); priv->branch_name = g_strdup(argv[1]); session_token = argv[3]; if (seaf_token_manager_verify_token (seaf->token_mgr, NULL, processor->peer_id, session_token, NULL) < 0) { ccnet_processor_send_response (processor, SC_ACCESS_DENIED, SS_ACCESS_DENIED, NULL, 0); ccnet_processor_done (processor, FALSE); return -1; } ccnet_processor_thread_create (processor, seaf->job_mgr, update_repo, thread_done, processor); return 0; }