mirror of
https://github.com/filecoin-project/slate.git
synced 2024-10-27 06:50:34 +03:00
temporary fix to speed up textile
This commit is contained in:
parent
8207ba4bcc
commit
41a048c705
@ -222,3 +222,9 @@ export const grids = {
|
||||
|
||||
export const profileDefaultPicture =
|
||||
"https://slate.textile.io/ipfs/bafkreick3nscgixwfpq736forz7kzxvvhuej6kszevpsgmcubyhsx2pf7i";
|
||||
|
||||
export const textile = {
|
||||
threadName: "buckets",
|
||||
mainBucket: "data",
|
||||
dealsBucket: "stage-deal",
|
||||
};
|
||||
|
@ -208,6 +208,10 @@ export const getRemainingTime = (seconds) => {
|
||||
return `${value} ${unit} remaining`;
|
||||
};
|
||||
|
||||
export const ipfsToCid = (ipfs) => {
|
||||
return ipfs.replace("/ipfs/", "");
|
||||
};
|
||||
|
||||
export const urlToCid = (url) => {
|
||||
return url
|
||||
.replace(`${Constants.gateways.ipfs}/`, "")
|
||||
|
@ -19,3 +19,9 @@ export const MIN_ARCHIVE_SIZE_BYTES = 104857600;
|
||||
export const TOKEN_EXPIRATION_TIME = 2 * 60 * 60 * 1000;
|
||||
|
||||
export const userPreviewProperties = ["users.id", "users.data", "users.username"];
|
||||
|
||||
export const textile = {
|
||||
threadName: "buckets",
|
||||
mainBucket: "data",
|
||||
dealsBucket: "stage-deal",
|
||||
};
|
||||
|
@ -144,6 +144,9 @@ export const getById = async ({ id }) => {
|
||||
return null;
|
||||
}
|
||||
|
||||
delete user.password;
|
||||
delete user.salt;
|
||||
|
||||
Data.createUsageStat({ id }); //NOTE(martina): to record the person's usage of Slate for analytics
|
||||
|
||||
// user.library = await Data.getFilesByUserId({ id, sanitize: true });
|
||||
@ -155,7 +158,7 @@ export const getById = async ({ id }) => {
|
||||
Data.getSubscriptionsByUserId({ ownerId: id }),
|
||||
Data.getFollowingByUserId({ ownerId: id }),
|
||||
Data.getFollowersByUserId({ userId: id }),
|
||||
Utilities.getBucketAPIFromUserToken({ user }),
|
||||
Utilities.getBucket({ user }),
|
||||
])
|
||||
).map((item) => item.value);
|
||||
|
||||
@ -322,7 +325,7 @@ export const getTextileById = async ({ id }) => {
|
||||
}
|
||||
|
||||
// NOTE(jim): This bucket is purely for staging data for other deals.
|
||||
const stagingData = await Utilities.getBucketAPIFromUserToken({
|
||||
const stagingData = await Utilities.getBucket({
|
||||
user,
|
||||
bucketName: STAGING_DEAL_BUCKET,
|
||||
encrypted: false,
|
||||
@ -385,7 +388,7 @@ export const getTextileById = async ({ id }) => {
|
||||
});
|
||||
}
|
||||
|
||||
const b = await Utilities.getBucketAPIFromUserToken({
|
||||
const b = await Utilities.getBucket({
|
||||
user,
|
||||
bucketName: "data",
|
||||
encrypted: false,
|
||||
|
@ -201,6 +201,95 @@ export const getBucketAPIFromUserToken = async ({ user, bucketName, encrypted =
|
||||
};
|
||||
};
|
||||
|
||||
export const createBucket = async ({
|
||||
bucketName = Constants.textile.mainBucket,
|
||||
encrypted = false,
|
||||
}) => {
|
||||
try {
|
||||
const identity = await PrivateKey.fromRandom();
|
||||
const textileKey = identity.toString();
|
||||
|
||||
let buckets = await Buckets.withKeyInfo(TEXTILE_KEY_INFO);
|
||||
|
||||
const textileToken = await buckets.getToken(identity);
|
||||
buckets.context.withToken(textileToken);
|
||||
|
||||
const client = new Client(buckets.context);
|
||||
const newId = ThreadID.fromRandom();
|
||||
await client.newDB(newId, Constants.textile.threadName);
|
||||
const textileThreadID = newId.toString();
|
||||
buckets.context.withThread(textileThreadID);
|
||||
|
||||
const created = await buckets.create(bucketName, { encrypted });
|
||||
let ipfs = created.root.path;
|
||||
const textileBucketCID = Strings.ipfsToCid(ipfs);
|
||||
|
||||
return {
|
||||
textileKey,
|
||||
// textileToken,
|
||||
// textileThreadID,
|
||||
// textileBucketCID,
|
||||
buckets,
|
||||
bucketKey: created.root.key,
|
||||
bucketRoot: created.root,
|
||||
bucketName,
|
||||
};
|
||||
} catch (e) {
|
||||
Logging.error(e?.message);
|
||||
}
|
||||
};
|
||||
|
||||
//NOTE(martina): only use this for existing users. This grabs their bucket without checking for an existing bucket
|
||||
export const getBucket = async ({ user, bucketName = Constants.textile.mainBucket }) => {
|
||||
let updateUser = false;
|
||||
let { textileKey, textileToken, textileThreadID, textileBucketCID } = user;
|
||||
textileKey = user.data?.tokens?.api;
|
||||
|
||||
if (!textileKey) {
|
||||
return await createBucket({ user, bucketName });
|
||||
}
|
||||
|
||||
let buckets = await Buckets.withKeyInfo(TEXTILE_KEY_INFO);
|
||||
|
||||
if (!textileToken) {
|
||||
const identity = PrivateKey.fromString(textileKey);
|
||||
textileToken = await buckets.getToken(identity);
|
||||
updateUser = true;
|
||||
}
|
||||
buckets.context.withToken(textileToken);
|
||||
|
||||
if (!textileThreadID) {
|
||||
const client = new Client(buckets.context);
|
||||
const res = await client.getThread("buckets");
|
||||
textileThreadID = typeof res.id === "string" ? res.id : ThreadID.fromBytes(res.id).toString();
|
||||
updateUser = true;
|
||||
}
|
||||
buckets.context.withThread(textileThreadID);
|
||||
|
||||
const roots = await buckets.list();
|
||||
const existing = roots.find((bucket) => bucket.name === bucketName);
|
||||
|
||||
if (!existing) {
|
||||
return { buckets: null, bucketKey: null, bucketRoot: null, bucketName };
|
||||
}
|
||||
|
||||
if (!textileBucketCID) {
|
||||
let ipfs = existing.path;
|
||||
textileBucketCID = Strings.ipfsToCid(ipfs);
|
||||
updateUser = true;
|
||||
}
|
||||
// if (updateUser) {
|
||||
// Data.updateUserById({ id: user.id, textileToken, textileThreadID, textileBucketCID });
|
||||
// }
|
||||
|
||||
return {
|
||||
buckets,
|
||||
bucketKey: existing.key,
|
||||
bucketRoot: existing,
|
||||
bucketName,
|
||||
};
|
||||
};
|
||||
|
||||
export const getFileName = (s) => {
|
||||
let target = s;
|
||||
if (target.endsWith("/")) {
|
||||
|
@ -20,7 +20,7 @@ export default async (req, res) => {
|
||||
bucketName = req.body.data.bucketName;
|
||||
}
|
||||
|
||||
const { buckets, bucketKey, bucketRoot } = await Utilities.getBucketAPIFromUserToken({
|
||||
const { buckets, bucketKey, bucketRoot } = await Utilities.getBucket({
|
||||
user,
|
||||
bucketName,
|
||||
});
|
||||
|
@ -13,7 +13,7 @@ export default async (req, res) => {
|
||||
return res.status(500).send({ decorator: "SERVER_BUCKET_REMOVE_NO_CID", error: true });
|
||||
}
|
||||
|
||||
const { buckets, bucketKey } = await Utilities.getBucketAPIFromUserToken({
|
||||
const { buckets, bucketKey } = await Utilities.getBucket({
|
||||
user,
|
||||
bucketName: req.body.data.bucketName,
|
||||
});
|
||||
|
@ -25,7 +25,7 @@ export default async (req, res) => {
|
||||
return res.status(400).send({ decorator: "SERVER_REMOVE_DATA_NO_IDS", error: true });
|
||||
}
|
||||
|
||||
const { buckets, bucketKey } = await Utilities.getBucketAPIFromUserToken({
|
||||
const { buckets, bucketKey } = await Utilities.getBucket({
|
||||
user,
|
||||
});
|
||||
|
||||
|
@ -9,7 +9,7 @@ export default async (req, res) => {
|
||||
if (!userInfo) return;
|
||||
const { id, user } = userInfo;
|
||||
|
||||
const { buckets, bucketKey } = await Utilities.getBucketAPIFromUserToken({
|
||||
const { buckets, bucketKey } = await Utilities.getBucket({
|
||||
user,
|
||||
});
|
||||
|
||||
|
@ -17,7 +17,7 @@ export default async (req, res) => {
|
||||
|
||||
let decorator = "SERVER_SAVE_COPY";
|
||||
|
||||
let { buckets, bucketKey, bucketRoot } = await Utilities.getBucketAPIFromUserToken({
|
||||
let { buckets, bucketKey, bucketRoot } = await Utilities.getBucket({
|
||||
user,
|
||||
});
|
||||
|
||||
|
@ -8,8 +8,6 @@ import * as Constants from "~/node_common/constants";
|
||||
|
||||
import JWT from "jsonwebtoken";
|
||||
|
||||
import { PrivateKey } from "@textile/hub";
|
||||
|
||||
export default async (req, res) => {
|
||||
const { pin, username } = req.body.data;
|
||||
|
||||
@ -83,19 +81,9 @@ export default async (req, res) => {
|
||||
return res.status(201).send({ decorator: "SERVER_CREATE_USER_USERNAME_TAKEN" });
|
||||
}
|
||||
|
||||
// TODO(jim):
|
||||
// Single Key Textile Auth.
|
||||
const identity = await PrivateKey.fromRandom();
|
||||
const api = identity.toString();
|
||||
|
||||
// TODO(jim):
|
||||
// Don't do this once you refactor.
|
||||
const { buckets, bucketKey, bucketName } = await Utilities.getBucketAPIFromUserToken({
|
||||
user: {
|
||||
username: newUsername,
|
||||
data: { tokens: { api } },
|
||||
},
|
||||
});
|
||||
const { buckets, bucketKey, bucketName, textileKey } = await Utilities.createBucket({});
|
||||
|
||||
if (!buckets) {
|
||||
return res
|
||||
@ -115,7 +103,7 @@ export default async (req, res) => {
|
||||
allow_automatic_data_storage: true,
|
||||
allow_encrypted_data_storage: true,
|
||||
},
|
||||
tokens: { api },
|
||||
tokens: { api: textileKey },
|
||||
twitter: {
|
||||
username: twitterUser.screen_name,
|
||||
verified: twitterUser.verified,
|
||||
|
@ -7,8 +7,6 @@ import * as SlateManager from "~/node_common/managers/slate";
|
||||
|
||||
import JWT from "jsonwebtoken";
|
||||
|
||||
import { PrivateKey } from "@textile/hub";
|
||||
|
||||
const COOKIE_NAME = "oauth_token";
|
||||
|
||||
export default async (req, res) => {
|
||||
@ -64,20 +62,10 @@ export default async (req, res) => {
|
||||
return res.status(201).send({ decorator: "SERVER_CREATE_USER_USERNAME_TAKEN" });
|
||||
}
|
||||
|
||||
// TODO(jim):
|
||||
// Single Key Textile Auth.
|
||||
const identity = await PrivateKey.fromRandom();
|
||||
const api = identity.toString();
|
||||
|
||||
const newUsername = username.toLowerCase();
|
||||
const newEmail = email.toLowerCase();
|
||||
|
||||
const { buckets, bucketKey, bucketName } = await Utilities.getBucketAPIFromUserToken({
|
||||
user: {
|
||||
username: newUsername,
|
||||
data: { tokens: { api } },
|
||||
},
|
||||
});
|
||||
const { buckets, bucketKey, bucketName, textileKey } = await Utilities.createBucket({});
|
||||
|
||||
if (!buckets) {
|
||||
return res
|
||||
@ -97,7 +85,7 @@ export default async (req, res) => {
|
||||
allow_automatic_data_storage: true,
|
||||
allow_encrypted_data_storage: true,
|
||||
},
|
||||
tokens: { api },
|
||||
tokens: { api: textileKey },
|
||||
twitter: {
|
||||
username: twitterUser.screen_name,
|
||||
verified: twitterUser.verified,
|
||||
|
@ -9,8 +9,6 @@ import * as Monitor from "~/node_common/monitor";
|
||||
|
||||
import BCrypt from "bcrypt";
|
||||
|
||||
import { PrivateKey } from "@textile/hub";
|
||||
|
||||
export default async (req, res) => {
|
||||
if (!Strings.isEmpty(Environment.ALLOWED_HOST) && req.headers.host !== Environment.ALLOWED_HOST) {
|
||||
return res.status(403).send({ decorator: "SERVER_CREATE_USER_NOT_ALLOWED", error: true });
|
||||
@ -54,22 +52,12 @@ export default async (req, res) => {
|
||||
const salt = await BCrypt.genSalt(rounds);
|
||||
const hash = await Utilities.encryptPassword(req.body.data.password, salt);
|
||||
|
||||
// TODO(jim):
|
||||
// Single Key Textile Auth.
|
||||
const identity = await PrivateKey.fromRandom();
|
||||
const api = identity.toString();
|
||||
|
||||
// TODO(jim):
|
||||
// Don't do this once you refactor.
|
||||
const newUsername = req.body.data.username.toLowerCase();
|
||||
const newEmail = verification.email;
|
||||
|
||||
const { buckets, bucketKey, bucketName } = await Utilities.getBucketAPIFromUserToken({
|
||||
user: {
|
||||
username: newUsername,
|
||||
data: { tokens: { api } },
|
||||
},
|
||||
});
|
||||
const { buckets, bucketKey, bucketName, textileKey } = await Utilities.createBucket({});
|
||||
|
||||
if (!buckets) {
|
||||
return res
|
||||
@ -90,7 +78,7 @@ export default async (req, res) => {
|
||||
allow_automatic_data_storage: true,
|
||||
allow_encrypted_data_storage: true,
|
||||
},
|
||||
tokens: { api },
|
||||
tokens: { api: textileKey },
|
||||
},
|
||||
});
|
||||
|
||||
|
@ -23,7 +23,7 @@ export default async (req, res) => {
|
||||
// NOTE(martina): delete all of their public and private files.
|
||||
await Data.deleteFilesByUserId({ ownerId: user.id });
|
||||
|
||||
const defaultData = await Utilities.getBucketAPIFromUserToken({ user });
|
||||
const defaultData = await Utilities.getBucket({ user });
|
||||
|
||||
// NOTE(jim): delete every bucket
|
||||
try {
|
||||
|
@ -57,7 +57,7 @@ export default async (req, res) => {
|
||||
if (req.body.data.type === "SAVE_DEFAULT_ARCHIVE_CONFIG") {
|
||||
let b;
|
||||
try {
|
||||
b = await Utilities.getBucketAPIFromUserToken({
|
||||
b = await Utilities.getBucket({
|
||||
user,
|
||||
bucketName: "data",
|
||||
});
|
||||
@ -68,7 +68,7 @@ export default async (req, res) => {
|
||||
user,
|
||||
message: e.message,
|
||||
code: e.code,
|
||||
functionName: `Utilities.getBucketAPIFromUserToken`,
|
||||
functionName: `Utilities.getBucket`,
|
||||
});
|
||||
|
||||
return res.status(500).send({ decorator: "SERVER_NO_BUCKET_DATA", error: true });
|
||||
|
@ -12,7 +12,7 @@ export default async (req, res) => {
|
||||
return res.status(403).send({ decorator: "SERVER_USER_NOT_FOUND", error: true });
|
||||
}
|
||||
|
||||
let { buckets, bucketKey } = await Utilities.getBucketAPIFromUserToken({
|
||||
let { buckets, bucketKey } = await Utilities.getBucket({
|
||||
user,
|
||||
});
|
||||
|
||||
|
@ -35,7 +35,7 @@ const saveCopyReposts = async () => {
|
||||
Logging.log(item);
|
||||
// continue;
|
||||
let user = { data: item.data };
|
||||
let { buckets, bucketKey, bucketRoot } = await Utilities.getBucketAPIFromUserToken({
|
||||
let { buckets, bucketKey, bucketRoot } = await Utilities.getBucket({
|
||||
user,
|
||||
});
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user